diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results
index beb993c..1215843 100644
--- a/.phpunit.cache/test-results
+++ b/.phpunit.cache/test-results
@@ -1 +1 @@
-{"version":"pest_3.8.4","defects":{"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Contacts\\BulkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\IbanPayments\\EditIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\QrPayments\\EditQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Items\\CreateItemRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Items\\EditAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Items\\FetchAListOfItemsRequestTest::__pest_evaluable_it_can_perform_the_request":5,"P\\Tests\\Requests\\Items\\FetchAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Countries\\CreateCountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\EditACountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\DeleteACountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\FetchACountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\FetchAListOfCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\SearchCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":8},"times":{"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.009,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\IssueAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_can_store_and_retrieve_an_authenticator":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_handles_serialization_and_unserialization_correctly":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_uses_configured_cache_store":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_falls_back_to_default_cache_store_when_bexio_cache_store_is_not_configured":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_returns_null_when_cached_data_cannot_be_decrypted":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_can_forget_cached_authenticator":0.002,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_returns_null_when_no_authenticator_is_cached":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_refreshes_expired_token_automatically":0.002,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_encrypts_the_authenticator_when_storing":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Contacts\\BulkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\DeleteATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_throws_exception_when_required_config_is_missing":0.001,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_returns_a_new_instance_each_time":0.002,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_resolves_to_a_ConnectWithOAuth_instance":0,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_returns_ConnectWithOAuth_with_config_values":0.003,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.269,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_can_create_failed_result_with_custom_redirect":0.002,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_returns_success_result_for_connector_with_authenticator_without_refresh_token":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_always_returns_success_result_for_any_connector":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_can_create_failed_result_without_custom_redirect":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_returns_success_result_for_connector_with_expired_authenticator":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_can_create_success_result_using_static_method":0,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\IbanPayments\\EditIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ContactRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.036,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\OAuth\\EndSessionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitiesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\EditQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\CreateATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\OAuth\\OpenIDConfigurationRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\OpenID\\FetchUserInfoRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\VatPeriods\\FetchAVatPeriodRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\DeleteAPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Projects\\FetchAListOfProjectsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\EditATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\VatPeriods\\FetchAListOfVatPeriodsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\SetIssuedInvoiceToDraftRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\CancelAPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Items\\FetchAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.384,"P\\Tests\\Requests\\Items\\SearchItemsRequestTest::__pest_evaluable_it_can_perform_the_request":0.32,"P\\Tests\\Requests\\Items\\CreateItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.335,"P\\Tests\\Requests\\Items\\EditAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.373,"P\\Tests\\Requests\\Items\\DeleteAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.5,"P\\Tests\\Requests\\Items\\FetchAListOfItemsRequestTest::__pest_evaluable_it_can_perform_the_request":0.169,"P\\Tests\\Requests\\Countries\\CreateCountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.233,"P\\Tests\\Requests\\Countries\\EditACountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.497,"P\\Tests\\Requests\\Countries\\DeleteACountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.309,"P\\Tests\\Requests\\Countries\\FetchACountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.292,"P\\Tests\\Requests\\Countries\\FetchAListOfCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.163,"P\\Tests\\Requests\\Countries\\SearchCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.155}}
\ No newline at end of file
+{"version":"pest_3.8.4","defects":{"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Contacts\\BulkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\IbanPayments\\EditIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\QrPayments\\EditQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Items\\CreateItemRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Items\\EditAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Items\\FetchAListOfItemsRequestTest::__pest_evaluable_it_can_perform_the_request":5,"P\\Tests\\Requests\\Items\\FetchAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Countries\\CreateCountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\EditACountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\DeleteACountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\FetchACountryRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\FetchAListOfCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Countries\\SearchCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Quotes\\IssueAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\EditAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\AcceptAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\DeclineAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\CreateInvoiceFromQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Quotes\\ShowPdfAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Quotes\\CreateOrderFromQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Quotes\\DeleteAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\RevertIssueAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Quotes\\CreateAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\MarkAsSentAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Quotes\\ReissueAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Quotes\\FetchAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\ItemPositions\\FetchAListOfItemPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\ItemPositions\\EditAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\ItemPositions\\CreateAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\ItemPositions\\DeleteAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\ItemPositions\\FetchAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":7,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":7},"times":{"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\IssueAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_can_store_and_retrieve_an_authenticator":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_handles_serialization_and_unserialization_correctly":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_uses_configured_cache_store":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_falls_back_to_default_cache_store_when_bexio_cache_store_is_not_configured":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_returns_null_when_cached_data_cannot_be_decrypted":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_can_forget_cached_authenticator":0.002,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_returns_null_when_no_authenticator_is_cached":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_refreshes_expired_token_automatically":0.004,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationStoreResolverTest::__pest_evaluable_it_encrypts_the_authenticator_when_storing":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Contacts\\BulkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ContactRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\DeleteATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ContactSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_throws_exception_when_required_config_is_missing":0,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_returns_a_new_instance_each_time":0,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_resolves_to_a_ConnectWithOAuth_instance":0,"P\\Tests\\Support\\DefaultBexioOAuthConfigResolverTest::__pest_evaluable_it_returns_ConnectWithOAuth_with_config_values":0,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.459,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_can_create_failed_result_with_custom_redirect":0.004,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_returns_success_result_for_connector_with_authenticator_without_refresh_token":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_always_returns_success_result_for_any_connector":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_can_create_failed_result_without_custom_redirect":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_returns_success_result_for_connector_with_expired_authenticator":0,"P\\Tests\\Support\\DefaultBexioOAuthAuthenticationValidateResolverTest::__pest_evaluable_it_can_create_success_result_using_static_method":0,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\IbanPayments\\EditIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\OAuth\\EndSessionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitiesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\EditQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\CreateATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\OAuth\\OpenIDConfigurationRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\OpenID\\FetchUserInfoRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\VatPeriods\\FetchAVatPeriodRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.032,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\DeleteAPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Projects\\FetchAListOfProjectsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ContactGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\EditATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\VatPeriods\\FetchAListOfVatPeriodsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.011,"P\\Tests\\Requests\\Invoices\\SetIssuedInvoiceToDraftRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\CancelAPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Items\\FetchAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Items\\SearchItemsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Items\\CreateItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Items\\EditAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Items\\DeleteAnItemRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Items\\FetchAListOfItemsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Countries\\CreateCountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Countries\\EditACountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Countries\\DeleteACountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Countries\\FetchACountryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Countries\\FetchAListOfCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Countries\\SearchCountriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Quotes\\IssueAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Quotes\\EditAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Quotes\\SearchQuotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Quotes\\AcceptAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Quotes\\DeclineAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Quotes\\CreateInvoiceFromQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Quotes\\ShowPdfAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Quotes\\CreateOrderFromQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Quotes\\DeleteAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Quotes\\FetchAListOfQuotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.02,"P\\Tests\\Requests\\Quotes\\RevertIssueAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Quotes\\CreateAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Quotes\\MarkAsSentAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Quotes\\ReissueAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Quotes\\FetchAQuoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.01,"P\\Tests\\Requests\\ItemPositions\\FetchAListOfItemPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ItemPositions\\EditAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ItemPositions\\CreateAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ItemPositions\\DeleteAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ItemPositions\\FetchAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001}}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 74cee2a..b43cd91 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,36 @@
All notable changes to `laravel-bexio` will be documented in this file.
-## 20251110
+## 20251127
+
+### Added REST APIs | v13.5
+
+- **Quote REST API**: Full implementation of Quote endpoints - [Documentation](README.md#quotes)
+- **ItemPosition REST API**: Full implementation of ItemPosition endpoints - [Documentation](README.md#item-positions)
+
+### ⚠️ Breaking Changes
+
+- **InvoicePositionDTO Abstraction**: Implemented an abstraction layer for `QuotePositionDTO` and `InvoicePositionDTO`
+ - **Breaking Change**: Start using the new `InvoicePositionDTO` that extends `ItemPositionDTO`
+ - The new structure provides better code reusability and consistency across position DTOs
+ - `QuotePositionDTO` now also uses the `ItemPositionDTO` abstraction
+ - See [Item Position DTOs documentation](README.md#item-positions) for migration details
+
+### 🐛 Bug Fixes
+
+- **AdditionalAddressDTO & CreateEditAdditionalAddressDTO**: Fixed `country_id` field type from `?string` to `?int` in `CreateEditAdditionalAddressDTO` to match the correct data type
+ - The `country_id` field is now properly typed as `?int` (nullable integer) in both DTOs
+ - Updated documentation examples to include `country_id` parameter
+- **AdditionalAddressDTO**: Ensured `postcode` field is properly typed as `?string` (nullable string) to handle cases where the API may return integer values
+
+## 20251126 | v13.3 & v13.4
+
+### Added REST APIs
+
+- **Countries REST API**: Full implementation of Countries endpoints - [Documentation](README.md#countries)
+- **Items REST API**: Full implementation of Items endpoints - [Documentation](README.md#items)
+
+## 20251110 | v13.2
### Removed ContactAdditionalAddresses
@@ -39,4 +68,3 @@ All notable changes to `laravel-bexio` will be documented in this file.
- **CalendarYearDTO**: Added `is_annual_reporting` field
- This field indicates whether the calendar year is used for annual reporting
-
diff --git a/README.md b/README.md
index d262572..a24c48b 100644
--- a/README.md
+++ b/README.md
@@ -51,7 +51,9 @@ This package was developed to give you a quick start to the Bexio API.
- [Files](#files)
- [Iban Payments](#iban-payments)
- [Invoices](#invoices)
+ - [Item Positions](#item-positions)
- [Items](#items)
+ - [Quotes](#quotes)
- [Languages](#languages)
- [Manual Entries](#manual-entries)
- [Notes](#notes)
@@ -727,8 +729,11 @@ We provide DTOs for the following:
| EditFileDTO |
| FileUsageDTO |
| InvoiceDTO |
-| InvoicePositionDTO |
+| InvoicePositionDTO (deprecated) |
| InvoiceTaxDTO |
+| ItemPositionDTO |
+| ItemPositionDTO\Abstractions\InvoicePositionDTO |
+| ItemPositionDTO\Abstractions\OfferPositionDTO |
| ItemDTO |
| CreateEditItemDTO |
| PdfDTO |
@@ -774,6 +779,12 @@ In addition to the above, we also provide DTOs to be used for create and edit re
> **📝 Recent DTO Field Updates:** For information about recent DTO field additions and changes, please see the [CHANGELOG.md](CHANGELOG.md#-dto-field-updates).
+> **⚠️ Item Position DTOs:** We provide specialized DTO abstractions for different document types:
+> - `ItemPositionDTO\Abstractions\InvoicePositionDTO` - Use for invoice positions (extends `ItemPositionDTO`)
+> - `ItemPositionDTO\Abstractions\OfferPositionDTO` - Use for quote/offer positions (extends `ItemPositionDTO`)
+>
+> The old `InvoicePositionDTO` in the `Invoices` namespace is **deprecated** but still available for backward compatibility. Please migrate to the new abstractions under `ItemPositionDTO\Abstractions`.
+
### Examples
Here are some examples of how to use the package with different authentication methods:
@@ -944,6 +955,7 @@ $additionalAddress = $connector->send(new CreateAnAdditionalAddressRequest(
address_addition: 'Apt 4B',
postcode: 1234,
city: 'Test City',
+ country_id: 1,
)
));
```
@@ -964,6 +976,7 @@ $additionalAddress = $connector->send(new EditAnAdditionalAddressRequest(
address_addition: 'Suite 2',
postcode: 4567,
city: 'Test City Edit',
+ country_id: 1,
)
));
```
@@ -1467,6 +1480,10 @@ $invoice = $connector->send(new FetchAnInvoiceRequest(
/**
* Create An Invoice
*/
+use CodebarAg\Bexio\Dto\Invoices\InvoiceDTO;
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO;
+use CodebarAg\Bexio\Enums\Accounts\AccountTypeEnum;
+
$contacts = $connector->send(new FetchAListOfContactsRequest);
$user = $connector->send(new FetchAuthenticatedUserRequest);
$languages = $connector->send(new FetchAListOfLanguagesRequest);
@@ -1547,6 +1564,8 @@ $response = $connector->send(new CancelAnInvoiceRequest(
/**
* Create A Default Position For An Invoice
*/
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO;
+
$units = $connector->send(new FetchAListOfUnitsRequest);
$accounts = $connector->send(new FetchAListOfAccountsRequest);
$taxes = $connector->send(new FetchAListOfTaxesRequest(scope: 'active', types: 'sales_tax'));
@@ -1573,6 +1592,8 @@ $response = $connector->send(new CreateADefaultPositionRequest(
/**
* Create A Sub Position For An Invoice
*/
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO;
+
$position = InvoicePositionDTO::fromArray([
'type' => 'KbSubPosition',
'text' => Str::uuid(),
@@ -1608,7 +1629,130 @@ return response(base64_decode($pdf->content))
->header('Content-Length', $pdf->size);
```
+### Item Positions
+```php
+/**
+ * Fetch A List Of Item Positions
+ */
+$itemPositions = $connector->send(new FetchAListOfItemPositionsRequest(
+ kb_document_id: 1,
+ kb_document_type: 'kb_offer'
+))->dto();
+```
+
+```php
+/**
+ * Fetch An Item Position
+ */
+$itemPosition = $connector->send(new FetchAnItemPositionRequest(
+ item_position_id: 1
+))->dto();
+```
+
+```php
+/**
+ * Create An Item Position
+ */
+$itemPosition = $connector->send(new CreateAnItemPositionRequest(
+ kb_document_id: 1,
+ itemPosition: new CreateEditItemPositionDTO(
+ kb_document_type: 'kb_offer',
+ type: 'KbPositionCustom',
+ amount: '1',
+ unit_id: 1,
+ account_id: 1,
+ tax_id: 1,
+ text: 'Test Item Position',
+ unit_price: '100.00',
+ discount_in_percent: '0',
+ )
+))->dto();
+```
+
+```php
+/**
+ * Edit An Item Position
+ */
+$itemPosition = $connector->send(new EditAnItemPositionRequest(
+ item_position_id: 1,
+ itemPosition: new CreateEditItemPositionDTO(
+ kb_document_type: 'kb_offer',
+ type: 'KbPositionCustom',
+ amount: '2',
+ unit_id: 1,
+ account_id: 1,
+ tax_id: 1,
+ text: 'Updated Item Position',
+ unit_price: '150.00',
+ discount_in_percent: '0',
+ )
+))->dto();
+```
+
+```php
+/**
+ * Delete An Item Position
+ */
+$response = $connector->send(new DeleteAnItemPositionRequest(
+ item_position_id: 1
+));
+```
+
+```php
+/**
+ * Create An Invoice Item Position using the abstraction
+ * Use ItemPositionDTO\Abstractions\InvoicePositionDTO for invoice positions
+ * Note: When using CreateAnItemPositionRequest, use CreateEditItemPositionDTO instead.
+ * The abstraction DTOs (InvoicePositionDTO, OfferPositionDTO) are primarily for use
+ * when creating invoices/quotes directly with positions in the DTO.
+ */
+use CodebarAg\Bexio\Dto\ItemPositions\CreateEditItemPositionDTO;
+
+$invoicePosition = new CreateEditItemPositionDTO(
+ kb_document_type: 'kb_invoice',
+ type: 'KbPositionCustom',
+ amount: '1',
+ unit_id: 1,
+ account_id: 1,
+ tax_id: 1,
+ text: 'Test Invoice Position',
+ unit_price: '100.00',
+ discount_in_percent: '0',
+);
+
+$itemPosition = $connector->send(new CreateAnItemPositionRequest(
+ kb_document_id: 1,
+ itemPosition: $invoicePosition
+))->dto();
+```
+
+```php
+/**
+ * Create An Offer Item Position using the abstraction
+ * Use ItemPositionDTO\Abstractions\OfferPositionDTO for quote/offer positions
+ * Note: When using CreateAnItemPositionRequest, use CreateEditItemPositionDTO instead.
+ * The abstraction DTOs (InvoicePositionDTO, OfferPositionDTO) are primarily for use
+ * when creating invoices/quotes directly with positions in the DTO.
+ */
+use CodebarAg\Bexio\Dto\ItemPositions\CreateEditItemPositionDTO;
+
+$offerPosition = new CreateEditItemPositionDTO(
+ kb_document_type: 'kb_offer',
+ type: 'KbPositionCustom',
+ amount: '1',
+ unit_id: 1,
+ account_id: 1,
+ tax_id: 1,
+ text: 'Test Offer Item Position',
+ unit_price: '100.00',
+ discount_in_percent: '0',
+);
+$itemPosition = $connector->send(new CreateAnItemPositionRequest(
+ kb_document_id: 1,
+ itemPosition: $offerPosition
+))->dto();
+```
### Languages
```php
@@ -2009,6 +2153,210 @@ $title = $connector->send(new DeleteATitleRequest(
));
```
+### Quotes
+```php
+/**
+ * Fetch A List Of Quotes
+ */
+$quotes = $connector->send(new FetchAListOfQuotesRequest())->dto();
+```
+
+```php
+/**
+ * Fetch A Quote
+ */
+$quote = $connector->send(new FetchAQuoteRequest(
+ quote_id: 1
+))->dto();
+```
+
+```php
+/**
+ * Search Quotes
+ */
+$quotes = $connector->send(new SearchQuotesRequest(
+ searchField: 'title',
+ searchTerm: 'Test'
+))->dto();
+```
+
+```php
+/**
+ * Create A Quote
+ */
+$contacts = $connector->send(new FetchAListOfContactsRequest);
+$user = $connector->send(new FetchAuthenticatedUserRequest);
+$languages = $connector->send(new FetchAListOfLanguagesRequest);
+$banks = $connector->send(new FetchAListOfBankAccountsRequest);
+$currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+$paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+$units = $connector->send(new FetchAListOfUnitsRequest);
+$accounts = $connector->send(new FetchAListOfAccountsRequest);
+$taxes = $connector->send(new FetchAListOfTaxesRequest(scope: 'active', types: 'sales_tax'));
+
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\OfferPositionDTO;
+use CodebarAg\Bexio\Dto\Quotes\QuoteDTO;
+use CodebarAg\Bexio\Enums\Accounts\AccountTypeEnum;
+
+$newQuote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d h:m:s'),
+ 'is_valid_to' => now()->addDays(5)->format('Y-m-d h:m:s'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionText',
+ 'show_pos_nr' => true,
+ 'text' => Str::uuid(),
+ ]),
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => $accounts->dto()->filter(fn ($account) => $account->account_type_enum === AccountTypeEnum::ACTIVE_ACCOUNTS())->first()->id,
+ 'tax_id' => $taxes->dto()->first()->id,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+]);
+
+$quote = $connector->send(new CreateAQuoteRequest(quote: $newQuote))->dto();
+```
+
+```php
+/**
+ * Edit A Quote
+ */
+$editQuote = $connector->send(new FetchAQuoteRequest(quote_id: 1))->dto();
+
+$editQuote->title = 'Updated Quote Title';
+
+$quote = $connector->send(new EditAQuoteRequest(quote_id: 1, quote: $editQuote));
+```
+
+```php
+/**
+ * Delete A Quote
+ */
+$response = $connector->send(new DeleteAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Issue A Quote
+ */
+$response = $connector->send(new IssueAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Revert Issue A Quote
+ */
+$response = $connector->send(new RevertIssueAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Accept A Quote
+ */
+$response = $connector->send(new AcceptAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Decline A Quote
+ */
+$response = $connector->send(new DeclineAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Reissue A Quote
+ */
+$response = $connector->send(new ReissueAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Mark Quote As Sent
+ */
+$response = $connector->send(new MarkAsSentAQuoteRequest(
+ quote_id: 1
+));
+```
+
+```php
+/**
+ * Show PDF Of A Quote
+ */
+$pdf = $connector->send(new ShowPdfAQuoteRequest(
+ quote_id: 1
+))->dto();
+
+/**
+ * Saving PDF from response
+ */
+Storage::disk('local')->put('your/directory/'. $pdf->name, base64_decode($pdf->content));
+
+/**
+ * Download PDF from response
+ */
+return response(base64_decode($pdf->content))
+ ->header('Content-Type', $pdf->mime)
+ ->header('Content-Disposition', 'attachment; filename="'.$pdf->name.'"')
+ ->header('Content-Length', $pdf->size);
+```
+
+```php
+/**
+ * Create Order From Quote
+ * Returns a JSON response (not a DTO)
+ */
+$response = $connector->send(new CreateOrderFromQuoteRequest(
+ quote_id: 1
+));
+
+// Access the response data
+$orderData = $response->json();
+```
+
+```php
+/**
+ * Create Invoice From Quote
+ * Returns a JSON response (not a DTO)
+ */
+$response = $connector->send(new CreateInvoiceFromQuoteRequest(
+ quote_id: 1
+));
+
+// Access the response data
+$invoiceData = $response->json();
+```
+
### Items
```php
/**
diff --git a/src/Dto/AdditionalAddresses/AdditionalAddressDTO.php b/src/Dto/AdditionalAddresses/AdditionalAddressDTO.php
index 9ff32cd..523b155 100644
--- a/src/Dto/AdditionalAddresses/AdditionalAddressDTO.php
+++ b/src/Dto/AdditionalAddresses/AdditionalAddressDTO.php
@@ -19,9 +19,9 @@ public function __construct(
public ?string $street_name = null,
public ?string $house_number = null,
public ?string $address_addition = null,
- public ?int $postcode = null,
+ public ?string $postcode = null,
public ?string $city = null,
- public ?string $country_id = null,
+ public ?int $country_id = null,
) {}
public static function fromResponse(Response $response): self
@@ -53,7 +53,7 @@ public static function fromArray(array $data): self
address_addition: Arr::get($data, 'address_addition'),
postcode: Arr::get($data, 'postcode'),
city: Arr::get($data, 'city'),
- country_id: Arr::get($data, 'country_id')
+ country_id: Arr::get($data, 'country_id') !== null ? (int) Arr::get($data, 'country_id') : null
);
}
}
diff --git a/src/Dto/AdditionalAddresses/CreateEditAdditionalAddressDTO.php b/src/Dto/AdditionalAddresses/CreateEditAdditionalAddressDTO.php
index f7d89c6..1f7b6ea 100644
--- a/src/Dto/AdditionalAddresses/CreateEditAdditionalAddressDTO.php
+++ b/src/Dto/AdditionalAddresses/CreateEditAdditionalAddressDTO.php
@@ -20,7 +20,7 @@ public function __construct(
public ?string $address_addition = null,
public ?int $postcode = null,
public ?string $city = null,
- public ?string $country_id = null,
+ public ?int $country_id = null,
) {}
public static function fromResponse(Response $response): self
@@ -51,7 +51,7 @@ public static function fromArray(array $data): self
address_addition: Arr::get($data, 'address_addition'),
postcode: Arr::get($data, 'postcode'),
city: Arr::get($data, 'city'),
- country_id: Arr::get($data, 'country_id'),
+ country_id: Arr::get($data, 'country_id') !== null ? (int) Arr::get($data, 'country_id') : null,
);
}
}
diff --git a/src/Dto/Invoices/InvoiceDTO.php b/src/Dto/Invoices/InvoiceDTO.php
index f2d2559..eac0038 100644
--- a/src/Dto/Invoices/InvoiceDTO.php
+++ b/src/Dto/Invoices/InvoiceDTO.php
@@ -2,6 +2,7 @@
namespace CodebarAg\Bexio\Dto\Invoices;
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO as NewInvoicePositionDTO;
use Exception;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
@@ -109,8 +110,8 @@ public static function fromArray(array $data): self
taxs: collect(Arr::get($data, 'taxs', []))->map(fn (array $tax) => InvoiceTaxDTO::fromArray($tax)),
network_link: Arr::get($data, 'network_link'),
positions: collect(Arr::get($data, 'positions', []))
- ->map(function (InvoicePositionDTO|array $tax) {
- if ($tax instanceof InvoicePositionDTO) {
+ ->map(function (InvoicePositionDTO|NewInvoicePositionDTO|array $tax) {
+ if ($tax instanceof InvoicePositionDTO || $tax instanceof NewInvoicePositionDTO) {
return $tax;
}
diff --git a/src/Dto/Invoices/InvoicePositionDTO.php b/src/Dto/Invoices/InvoicePositionDTO.php
index 64189ce..f8f0f31 100644
--- a/src/Dto/Invoices/InvoicePositionDTO.php
+++ b/src/Dto/Invoices/InvoicePositionDTO.php
@@ -7,6 +7,7 @@
use Saloon\Http\Response;
use Spatie\LaravelData\Data;
+/* Deprecated */
class InvoicePositionDTO extends Data
{
public function __construct(
diff --git a/src/Dto/ItemPositions/Abstractions/InvoicePositionDTO.php b/src/Dto/ItemPositions/Abstractions/InvoicePositionDTO.php
new file mode 100644
index 0000000..ceda6bf
--- /dev/null
+++ b/src/Dto/ItemPositions/Abstractions/InvoicePositionDTO.php
@@ -0,0 +1,101 @@
+failed()) {
+ throw new \Exception('Failed to create DTO from Response');
+ }
+
+ $data = $response->json();
+
+ return self::fromArray($data);
+ }
+
+ public static function fromArray(array $data): self
+ {
+ if (! $data) {
+ throw new Exception('Unable to create DTO. Data missing from response.');
+ }
+
+ return new self(
+ type: Arr::get($data, 'type', 'kb_invoice'),
+ id: Arr::get($data, 'id'),
+ amount: Arr::get($data, 'amount'),
+ unit_id: Arr::get($data, 'unit_id'),
+ unit_name: Arr::get($data, 'unit_name'),
+ account_id: Arr::get($data, 'account_id'),
+ tax_id: Arr::get($data, 'tax_id'),
+ tax_value: Arr::get($data, 'tax_value'),
+ text: Arr::get($data, 'text'),
+ unit_price: Arr::get($data, 'unit_price'),
+ discount_in_percent: Arr::get($data, 'discount_in_percent'),
+ position_total: Arr::get($data, 'position_total'),
+ parent_id: Arr::get($data, 'parent_id'),
+ article_id: Arr::get($data, 'article_id'),
+ show_pos_nr: Arr::get($data, 'show_pos_nr'),
+ pagebreak: Arr::get($data, 'pagebreak'),
+ is_percentual: Arr::get($data, 'is_percentual'),
+ value: Arr::get($data, 'value'),
+ pos: Arr::get($data, 'pos'),
+ internal_pos: Arr::get($data, 'internal_pos'),
+ is_optional: Arr::get($data, 'is_optional'),
+ );
+ }
+}
diff --git a/src/Dto/ItemPositions/Abstractions/OfferPositionDTO.php b/src/Dto/ItemPositions/Abstractions/OfferPositionDTO.php
new file mode 100644
index 0000000..5d07bef
--- /dev/null
+++ b/src/Dto/ItemPositions/Abstractions/OfferPositionDTO.php
@@ -0,0 +1,89 @@
+failed()) {
+ throw new \Exception('Failed to create DTO from Response');
+ }
+
+ $data = $response->json();
+
+ return self::fromArray($data);
+ }
+
+ public static function fromArray(array $data): self
+ {
+ if (! $data) {
+ throw new Exception('Unable to create DTO. Data missing from response.');
+ }
+
+ return new self(
+ kb_document_type: Arr::get($data, 'kb_document_type'),
+ kb_position_id: Arr::get($data, 'kb_position_id'),
+ type: Arr::get($data, 'type'),
+ amount: Arr::get($data, 'amount'),
+ unit_id: Arr::get($data, 'unit_id'),
+ account_id: Arr::get($data, 'account_id'),
+ tax_id: Arr::get($data, 'tax_id'),
+ text: Arr::get($data, 'text'),
+ unit_price: Arr::get($data, 'unit_price'),
+ discount_in_percent: Arr::get($data, 'discount_in_percent'),
+ parent_id: Arr::get($data, 'parent_id'),
+ article_id: Arr::get($data, 'article_id'),
+ show_pos_nr: Arr::get($data, 'show_pos_nr'),
+ pagebreak: Arr::get($data, 'pagebreak'),
+ is_percentual: Arr::get($data, 'is_percentual'),
+ value: Arr::get($data, 'value'),
+ is_optional: Arr::get($data, 'is_optional'),
+ );
+ }
+}
diff --git a/src/Dto/ItemPositions/ItemPositionDTO.php b/src/Dto/ItemPositions/ItemPositionDTO.php
new file mode 100644
index 0000000..3698e0f
--- /dev/null
+++ b/src/Dto/ItemPositions/ItemPositionDTO.php
@@ -0,0 +1,77 @@
+failed()) {
+ throw new \Exception('Failed to create DTO from Response');
+ }
+
+ $data = $response->json();
+
+ return self::fromArray($data);
+ }
+
+ public static function fromArray(array $data): self
+ {
+ if (! $data) {
+ throw new Exception('Unable to create DTO. Data missing from response.');
+ }
+
+ return new self(
+ type: Arr::get($data, 'type'),
+ id: Arr::get($data, 'id'),
+ amount: Arr::get($data, 'amount'),
+ unit_id: Arr::get($data, 'unit_id'),
+ unit_name: Arr::get($data, 'unit_name'),
+ account_id: Arr::get($data, 'account_id'),
+ tax_id: Arr::get($data, 'tax_id'),
+ tax_value: Arr::get($data, 'tax_value'),
+ text: Arr::get($data, 'text'),
+ unit_price: Arr::get($data, 'unit_price'),
+ discount_in_percent: Arr::get($data, 'discount_in_percent'),
+ position_total: Arr::get($data, 'position_total'),
+ parent_id: Arr::get($data, 'parent_id'),
+ article_id: Arr::get($data, 'article_id'),
+ show_pos_nr: Arr::get($data, 'show_pos_nr'),
+ pagebreak: Arr::get($data, 'pagebreak'),
+ is_percentual: Arr::get($data, 'is_percentual'),
+ value: Arr::get($data, 'value'),
+ pos: Arr::get($data, 'pos'),
+ internal_pos: Arr::get($data, 'internal_pos'),
+ is_optional: Arr::get($data, 'is_optional'),
+ );
+ }
+}
diff --git a/src/Dto/ItemPositions/OfferItemPositionDTO.php b/src/Dto/ItemPositions/OfferItemPositionDTO.php
new file mode 100644
index 0000000..b11af28
--- /dev/null
+++ b/src/Dto/ItemPositions/OfferItemPositionDTO.php
@@ -0,0 +1,46 @@
+failed()) {
+ throw new \Exception('Failed to create DTO from Response');
+ }
+
+ $data = $response->json();
+
+ return self::fromArray($data);
+ }
+
+ public static function fromArray(array $data): self
+ {
+ if (! $data) {
+ throw new Exception('Unable to create DTO. Data missing from response.');
+ }
+
+ return new self(
+ id: Arr::get($data, 'id'),
+ document_nr: Arr::get($data, 'document_nr'),
+ title: Arr::get($data, 'title'),
+ contact_id: Arr::get($data, 'contact_id'),
+ contact_sub_id: Arr::get($data, 'contact_sub_id'),
+ user_id: Arr::get($data, 'user_id'),
+ pr_project_id: Arr::get($data, 'pr_project_id'),
+ logopaper_id: Arr::get($data, 'logopaper_id'),
+ language_id: Arr::get($data, 'language_id'),
+ bank_account_id: Arr::get($data, 'bank_account_id'),
+ currency_id: Arr::get($data, 'currency_id'),
+ payment_type_id: Arr::get($data, 'payment_type_id'),
+ header: Arr::get($data, 'header'),
+ footer: Arr::get($data, 'footer'),
+ total_gross: Arr::get($data, 'total_gross'),
+ total_net: Arr::get($data, 'total_net'),
+ total_taxes: Arr::get($data, 'total_taxes'),
+ total: Arr::get($data, 'total'),
+ total_rounding_difference: Arr::get($data, 'total_rounding_difference'),
+ mwst_type: Arr::get($data, 'mwst_type'),
+ mwst_is_net: Arr::get($data, 'mwst_is_net'),
+ show_position_taxes: Arr::get($data, 'show_position_taxes'),
+ is_valid_from: Arr::get($data, 'is_valid_from'),
+ is_valid_until: Arr::get($data, 'is_valid_until'),
+ contact_address: Arr::get($data, 'contact_address'),
+ kb_item_status_id: Arr::get($data, 'kb_item_status_id'),
+ reference: Arr::get($data, 'reference'),
+ api_reference: Arr::get($data, 'api_reference'),
+ viewed_by_client_at: Arr::get($data, 'viewed_by_client_at'),
+ updated_at: Arr::get($data, 'updated_at'),
+ esr_id: Arr::get($data, 'esr_id'),
+ qr_invoice_id: Arr::get($data, 'qr_invoice_id'),
+ template_slug: Arr::get($data, 'template_slug'),
+ taxs: collect(Arr::get($data, 'taxs', []))->map(fn (array $tax) => InvoiceTaxDTO::fromArray($tax)),
+ network_link: Arr::get($data, 'network_link'),
+ positions: collect(Arr::get($data, 'positions', []))
+ ->map(function (OfferPositionDTO|array $position) {
+ if ($position instanceof OfferPositionDTO) {
+ return $position;
+ }
+
+ return OfferPositionDTO::fromArray($position);
+ }),
+ );
+ }
+}
diff --git a/src/Http/Controllers/BexioOAuthController.php b/src/Http/Controllers/BexioOAuthController.php
index 6cc7064..55c6999 100644
--- a/src/Http/Controllers/BexioOAuthController.php
+++ b/src/Http/Controllers/BexioOAuthController.php
@@ -49,7 +49,7 @@ public function callback(Request $request): RedirectResponse
if ($request->has('error')) {
return Redirect::to(config('bexio.redirect_url', '/'))
->with('bexio_oauth_success', false)
- ->with('bexio_oauth_message', 'OAuth authorization failed: '.$request->get('error'));
+ ->with('bexio_oauth_message', 'OAuth authorization failed: '.$request->query('error'));
}
if ($request->missing('code') || $request->missing('state')) {
@@ -59,8 +59,8 @@ public function callback(Request $request): RedirectResponse
}
$authenticator = $this->connector()->getAccessToken(
- code: $request->get('code'),
- state: $request->get('state'),
+ code: $request->query('code'),
+ state: $request->query('state'),
expectedState: Session::get('bexio_oauth_state')
);
diff --git a/src/Requests/Invoices/CreateAnInvoiceRequest.php b/src/Requests/Invoices/CreateAnInvoiceRequest.php
index 2581df2..7693088 100644
--- a/src/Requests/Invoices/CreateAnInvoiceRequest.php
+++ b/src/Requests/Invoices/CreateAnInvoiceRequest.php
@@ -4,6 +4,7 @@
use CodebarAg\Bexio\Dto\Invoices\InvoiceDTO;
use CodebarAg\Bexio\Dto\Invoices\InvoicePositionDTO;
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO as NewInvoicePositionDTO;
use Exception;
use Illuminate\Support\Collection;
use Saloon\Contracts\Body\HasBody;
@@ -109,7 +110,7 @@ protected function filterPositions(Collection $positions): Collection
],
];
- return $positions->map(function (InvoicePositionDTO $position) use ($allowedKeys) {
+ return $positions->map(function (InvoicePositionDTO|NewInvoicePositionDTO $position) use ($allowedKeys) {
return collect($position->toArray())->only(
array_merge(['type'], $allowedKeys[$position->type])
);
diff --git a/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php b/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php
index 5402946..fb5d334 100644
--- a/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php
+++ b/src/Requests/Invoices/DefaultPositions/CreateADefaultPositionRequest.php
@@ -3,6 +3,7 @@
namespace CodebarAg\Bexio\Requests\Invoices\DefaultPositions;
use CodebarAg\Bexio\Dto\Invoices\InvoicePositionDTO;
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO as NewInvoicePositionDTO;
use Exception;
use Illuminate\Support\Collection;
use Saloon\Contracts\Body\HasBody;
@@ -20,7 +21,7 @@ class CreateADefaultPositionRequest extends Request implements HasBody
public function __construct(
protected string $kb_document_type,
protected int $invoice_id,
- protected ?InvoicePositionDTO $position = null,
+ protected InvoicePositionDTO|NewInvoicePositionDTO|null $position = null,
) {}
public function resolveEndpoint(): string
@@ -41,7 +42,7 @@ public function defaultBody(): array
return [];
}
- protected function filterPosition(InvoicePositionDTO $position): Collection
+ protected function filterPosition(InvoicePositionDTO|NewInvoicePositionDTO $position): Collection
{
return collect($position->toArray())->only([
'amount',
diff --git a/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php b/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php
index 64dde26..65343ec 100644
--- a/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php
+++ b/src/Requests/Invoices/SubPositions/CreateASubPositionRequest.php
@@ -3,6 +3,7 @@
namespace CodebarAg\Bexio\Requests\Invoices\SubPositions;
use CodebarAg\Bexio\Dto\Invoices\InvoicePositionDTO;
+use CodebarAg\Bexio\Dto\ItemPositions\Abstractions\InvoicePositionDTO as NewInvoicePositionDTO;
use Exception;
use Illuminate\Support\Collection;
use Saloon\Contracts\Body\HasBody;
@@ -20,7 +21,7 @@ class CreateASubPositionRequest extends Request implements HasBody
public function __construct(
protected string $kb_document_type,
protected int $invoice_id,
- protected ?InvoicePositionDTO $position = null,
+ protected InvoicePositionDTO|NewInvoicePositionDTO|null $position = null,
) {}
public function resolveEndpoint(): string
@@ -41,7 +42,7 @@ public function defaultBody(): array
return [];
}
- protected function filterPosition(InvoicePositionDTO $position): Collection
+ protected function filterPosition(InvoicePositionDTO|NewInvoicePositionDTO $position): Collection
{
return collect($position->toArray())->only([
'text',
diff --git a/src/Requests/ItemPositions/CreateAnItemPositionRequest.php b/src/Requests/ItemPositions/CreateAnItemPositionRequest.php
new file mode 100644
index 0000000..7e670e7
--- /dev/null
+++ b/src/Requests/ItemPositions/CreateAnItemPositionRequest.php
@@ -0,0 +1,110 @@
+itemPosition) {
+ $itemPosition = collect($this->itemPosition->toArray());
+ $itemPosition->put('kb_document_id', $this->kb_document_id);
+
+ return $this->filterItemPosition($itemPosition);
+ }
+
+ return [];
+ }
+
+ protected function filterItemPosition(Collection $itemPosition): array
+ {
+ $allowedKeys = [
+ 'KbPositionCustom' => [
+ 'kb_document_id',
+ 'kb_document_type',
+ 'amount',
+ 'unit_id',
+ 'account_id',
+ 'tax_id',
+ 'text',
+ 'unit_price',
+ 'discount_in_percent',
+ ],
+ 'KbPositionArticle' => [
+ 'kb_document_id',
+ 'kb_document_type',
+ 'amount',
+ 'unit_id',
+ 'account_id',
+ 'tax_id',
+ 'text',
+ 'unit_price',
+ 'discount_in_percent',
+ 'article_id',
+ ],
+ 'KbPositionText' => [
+ 'kb_document_id',
+ 'kb_document_type',
+ 'text',
+ 'show_pos_nr',
+ ],
+ 'KbPositionSubtotal' => [
+ 'kb_document_id',
+ 'kb_document_type',
+ 'text',
+ ],
+ 'KbPositionPagebreak' => [
+ 'kb_document_id',
+ 'kb_document_type',
+ 'pagebreak',
+ ],
+ 'KbPositionDiscount' => [
+ 'kb_document_id',
+ 'kb_document_type',
+ 'text',
+ 'is_percentual',
+ 'value',
+ ],
+ ];
+
+ $type = $itemPosition->get('type');
+ $keys = array_merge(['type'], $allowedKeys[$type] ?? []);
+
+ return $itemPosition->only($keys)->toArray();
+ }
+
+ public function createDtoFromResponse(Response $response): ItemPositionDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ return ItemPositionDTO::fromArray($res);
+ }
+}
diff --git a/src/Requests/ItemPositions/DeleteAnItemPositionRequest.php b/src/Requests/ItemPositions/DeleteAnItemPositionRequest.php
new file mode 100644
index 0000000..8dcd1bf
--- /dev/null
+++ b/src/Requests/ItemPositions/DeleteAnItemPositionRequest.php
@@ -0,0 +1,34 @@
+item_position_id;
+ }
+
+ /**
+ * @throws \JsonException
+ */
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/ItemPositions/EditAnItemPositionRequest.php b/src/Requests/ItemPositions/EditAnItemPositionRequest.php
new file mode 100644
index 0000000..6e4ba9c
--- /dev/null
+++ b/src/Requests/ItemPositions/EditAnItemPositionRequest.php
@@ -0,0 +1,97 @@
+item_position_id;
+ }
+
+ public function defaultBody(): array
+ {
+ if ($this->itemPosition) {
+ $itemPosition = collect($this->itemPosition->toArray());
+
+ return $this->filterItemPosition($itemPosition);
+ }
+
+ return [];
+ }
+
+ protected function filterItemPosition(Collection $itemPosition): array
+ {
+ $allowedKeys = [
+ 'KbPositionCustom' => [
+ 'amount',
+ 'unit_id',
+ 'account_id',
+ 'tax_id',
+ 'text',
+ 'unit_price',
+ 'discount_in_percent',
+ ],
+ 'KbPositionArticle' => [
+ 'amount',
+ 'unit_id',
+ 'account_id',
+ 'tax_id',
+ 'text',
+ 'unit_price',
+ 'discount_in_percent',
+ 'article_id',
+ ],
+ 'KbPositionText' => [
+ 'text',
+ 'show_pos_nr',
+ ],
+ 'KbPositionSubtotal' => [
+ 'text',
+ ],
+ 'KbPositionPagebreak' => [
+ 'pagebreak',
+ ],
+ 'KbPositionDiscount' => [
+ 'text',
+ 'is_percentual',
+ 'value',
+ ],
+ ];
+
+ $type = $itemPosition->get('type');
+ $keys = array_merge(['type'], $allowedKeys[$type] ?? []);
+
+ return $itemPosition->only($keys)->toArray();
+ }
+
+ public function createDtoFromResponse(Response $response): ItemPositionDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ return ItemPositionDTO::fromArray($res);
+ }
+}
diff --git a/src/Requests/ItemPositions/FetchAListOfItemPositionsRequest.php b/src/Requests/ItemPositions/FetchAListOfItemPositionsRequest.php
new file mode 100644
index 0000000..cc62ed1
--- /dev/null
+++ b/src/Requests/ItemPositions/FetchAListOfItemPositionsRequest.php
@@ -0,0 +1,56 @@
+ $this->kb_document_id,
+ 'kb_document_type' => $this->kb_document_type,
+ 'order_by' => $this->orderBy,
+ 'limit' => $this->limit,
+ 'offset' => $this->offset,
+ ];
+ }
+
+ public function createDtoFromResponse(Response $response): Collection
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ $itemPositions = collect();
+
+ foreach ($res as $itemPosition) {
+ $itemPositions->push(ItemPositionDTO::fromArray($itemPosition));
+ }
+
+ return $itemPositions;
+ }
+}
diff --git a/src/Requests/ItemPositions/FetchAnItemPositionRequest.php b/src/Requests/ItemPositions/FetchAnItemPositionRequest.php
new file mode 100644
index 0000000..5cb94b8
--- /dev/null
+++ b/src/Requests/ItemPositions/FetchAnItemPositionRequest.php
@@ -0,0 +1,34 @@
+item_position_id;
+ }
+
+ public function createDtoFromResponse(Response $response): ItemPositionDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $itemPosition = $response->json();
+
+ return ItemPositionDTO::fromArray($itemPosition);
+ }
+}
diff --git a/src/Requests/Quotes/AcceptAQuoteRequest.php b/src/Requests/Quotes/AcceptAQuoteRequest.php
new file mode 100644
index 0000000..8e372c8
--- /dev/null
+++ b/src/Requests/Quotes/AcceptAQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/accept';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/CreateAQuoteRequest.php b/src/Requests/Quotes/CreateAQuoteRequest.php
new file mode 100644
index 0000000..a8d3706
--- /dev/null
+++ b/src/Requests/Quotes/CreateAQuoteRequest.php
@@ -0,0 +1,140 @@
+quote) {
+ $quote = collect($this->quote->toArray());
+
+ return $this->filterQuote($quote);
+ }
+
+ return [];
+ }
+
+ protected function filterQuote(Collection $quote): array
+ {
+ $filteredQuote = $quote->only(keys: [
+ 'title',
+ 'contact_id',
+ 'contact_sub_id',
+ 'user_id',
+ 'pr_project_id',
+ 'logopaper_id',
+ 'language_id',
+ 'bank_account_id',
+ 'currency_id',
+ 'payment_type_id',
+ 'header',
+ 'footer',
+ 'mwst_type',
+ 'mwst_is_net',
+ 'show_position_taxes',
+ 'is_valid_from',
+ 'is_valid_until',
+ 'api_reference',
+ 'viewed_by_client_at',
+ 'template_slug',
+ 'positions',
+ ]);
+
+ $positions = $quote->get('positions');
+ if ($positions) {
+ $filteredQuote->put('positions', $this->filterPositions(collect($positions)));
+ }
+
+ return $filteredQuote->toArray();
+ }
+
+ protected function filterPositions(Collection $positions): array
+ {
+ $allowedKeys = [
+ 'KbPositionCustom' => [
+ 'amount',
+ 'unit_id',
+ 'account_id',
+ 'tax_id',
+ 'text',
+ 'unit_price',
+ 'discount_in_percent',
+ ],
+ 'KbPositionArticle' => [
+ 'amount',
+ 'unit_id',
+ 'account_id',
+ 'tax_id',
+ 'text',
+ 'unit_price',
+ 'discount_in_percent',
+ 'article_id',
+ ],
+ 'KbPositionText' => [
+ 'text',
+ 'show_pos_nr',
+ ],
+ 'KbPositionSubtotal' => [
+ 'text',
+ ],
+ 'KbPositionPagebreak' => [
+ 'pagebreak',
+ ],
+ 'KbPositionDiscount' => [
+ 'text',
+ 'is_percentual',
+ 'value',
+ ],
+ ];
+
+ return $positions->map(function (OfferPositionDTO|array $position) use ($allowedKeys) {
+ // Handle both OfferPositionDTO objects and arrays
+ $positionData = $position instanceof OfferPositionDTO ? $position->toArray() : $position;
+ $positionCollection = collect($positionData);
+ $type = $positionCollection->get('type');
+
+ if (! isset($allowedKeys[$type])) {
+ return $positionCollection->toArray();
+ }
+
+ return $positionCollection->only(
+ array_merge(['type'], $allowedKeys[$type])
+ )->filter(fn ($value) => $value !== null)->toArray();
+ })->toArray();
+ }
+
+ public function createDtoFromResponse(Response $response): QuoteDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ return QuoteDTO::fromArray($res);
+ }
+}
diff --git a/src/Requests/Quotes/CreateInvoiceFromQuoteRequest.php b/src/Requests/Quotes/CreateInvoiceFromQuoteRequest.php
new file mode 100644
index 0000000..695a430
--- /dev/null
+++ b/src/Requests/Quotes/CreateInvoiceFromQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/invoice';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/CreateOrderFromQuoteRequest.php b/src/Requests/Quotes/CreateOrderFromQuoteRequest.php
new file mode 100644
index 0000000..777a53e
--- /dev/null
+++ b/src/Requests/Quotes/CreateOrderFromQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/order';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/DeclineAQuoteRequest.php b/src/Requests/Quotes/DeclineAQuoteRequest.php
new file mode 100644
index 0000000..40a0b0d
--- /dev/null
+++ b/src/Requests/Quotes/DeclineAQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/reject';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/DeleteAQuoteRequest.php b/src/Requests/Quotes/DeleteAQuoteRequest.php
new file mode 100644
index 0000000..d411831
--- /dev/null
+++ b/src/Requests/Quotes/DeleteAQuoteRequest.php
@@ -0,0 +1,34 @@
+quote_id;
+ }
+
+ /**
+ * @throws \JsonException
+ */
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/EditAQuoteRequest.php b/src/Requests/Quotes/EditAQuoteRequest.php
new file mode 100644
index 0000000..0799e48
--- /dev/null
+++ b/src/Requests/Quotes/EditAQuoteRequest.php
@@ -0,0 +1,79 @@
+quote_id;
+ }
+
+ public function defaultBody(): array
+ {
+ if ($this->quote) {
+ $quote = collect($this->quote->toArray());
+
+ return $this->filterQuote($quote);
+ }
+
+ return [];
+ }
+
+ protected function filterQuote(Collection $quote): array
+ {
+ $filteredQuote = $quote->only(keys: [
+ 'title',
+ 'contact_id',
+ 'contact_sub_id',
+ 'user_id',
+ 'pr_project_id',
+ 'logopaper_id',
+ 'language_id',
+ 'bank_account_id',
+ 'currency_id',
+ 'payment_type_id',
+ 'header',
+ 'footer',
+ 'mwst_type',
+ 'mwst_is_net',
+ 'show_position_taxes',
+ 'is_valid_from',
+ 'is_valid_until',
+ 'api_reference',
+ 'viewed_by_client_at',
+ 'template_slug',
+ ]);
+
+ return $filteredQuote->toArray();
+ }
+
+ public function createDtoFromResponse(Response $response): QuoteDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ return QuoteDTO::fromArray($res);
+ }
+}
diff --git a/src/Requests/Quotes/FetchAListOfQuotesRequest.php b/src/Requests/Quotes/FetchAListOfQuotesRequest.php
new file mode 100644
index 0000000..401dc2e
--- /dev/null
+++ b/src/Requests/Quotes/FetchAListOfQuotesRequest.php
@@ -0,0 +1,52 @@
+ $this->orderBy,
+ 'limit' => $this->limit,
+ 'offset' => $this->offset,
+ ];
+ }
+
+ public function createDtoFromResponse(Response $response): Collection
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ $quotes = collect();
+
+ foreach ($res as $quote) {
+ $quotes->push(QuoteDTO::fromArray($quote));
+ }
+
+ return $quotes;
+ }
+}
diff --git a/src/Requests/Quotes/FetchAQuoteRequest.php b/src/Requests/Quotes/FetchAQuoteRequest.php
new file mode 100644
index 0000000..ae916e2
--- /dev/null
+++ b/src/Requests/Quotes/FetchAQuoteRequest.php
@@ -0,0 +1,34 @@
+quote_id;
+ }
+
+ public function createDtoFromResponse(Response $response): QuoteDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $quote = $response->json();
+
+ return QuoteDTO::fromArray($quote);
+ }
+}
diff --git a/src/Requests/Quotes/IssueAQuoteRequest.php b/src/Requests/Quotes/IssueAQuoteRequest.php
new file mode 100644
index 0000000..aece801
--- /dev/null
+++ b/src/Requests/Quotes/IssueAQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/issue';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/MarkAsSentAQuoteRequest.php b/src/Requests/Quotes/MarkAsSentAQuoteRequest.php
new file mode 100644
index 0000000..452a1bc
--- /dev/null
+++ b/src/Requests/Quotes/MarkAsSentAQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/mark_as_sent';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/ReissueAQuoteRequest.php b/src/Requests/Quotes/ReissueAQuoteRequest.php
new file mode 100644
index 0000000..21f8041
--- /dev/null
+++ b/src/Requests/Quotes/ReissueAQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/reissue';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/RevertIssueAQuoteRequest.php b/src/Requests/Quotes/RevertIssueAQuoteRequest.php
new file mode 100644
index 0000000..e9c1857
--- /dev/null
+++ b/src/Requests/Quotes/RevertIssueAQuoteRequest.php
@@ -0,0 +1,31 @@
+quote_id.'/revertIssue';
+ }
+
+ public function createDtoFromResponse(Response $response): mixed
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ return $response->json();
+ }
+}
diff --git a/src/Requests/Quotes/SearchQuotesRequest.php b/src/Requests/Quotes/SearchQuotesRequest.php
new file mode 100644
index 0000000..313618f
--- /dev/null
+++ b/src/Requests/Quotes/SearchQuotesRequest.php
@@ -0,0 +1,71 @@
+ $this->orderBy,
+ 'limit' => $this->limit,
+ 'offset' => $this->offset,
+ ];
+ }
+
+ protected function defaultBody(): array
+ {
+ return [
+ [
+ 'field' => $this->searchField,
+ 'value' => $this->searchTerm,
+ 'criteria' => $this->searchCriteria instanceof SearchCriteriaEnum ? $this->searchCriteria->value : $this->searchCriteria,
+ ],
+ ];
+ }
+
+ public function createDtoFromResponse(Response $response): Collection
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ $quotes = collect();
+
+ foreach ($res as $quote) {
+ $quotes->push(QuoteDTO::fromArray($quote));
+ }
+
+ return $quotes;
+ }
+}
diff --git a/src/Requests/Quotes/ShowPdfAQuoteRequest.php b/src/Requests/Quotes/ShowPdfAQuoteRequest.php
new file mode 100644
index 0000000..1bd30c5
--- /dev/null
+++ b/src/Requests/Quotes/ShowPdfAQuoteRequest.php
@@ -0,0 +1,34 @@
+quote_id.'/pdf';
+ }
+
+ public function createDtoFromResponse(Response $response): PdfDTO
+ {
+ if (! $response->successful()) {
+ throw new Exception('Request was not successful. Unable to create DTO.');
+ }
+
+ $res = $response->json();
+
+ return PdfDTO::fromArray($res);
+ }
+}
diff --git a/tests/Fixtures/Saloon/Accounts/fetch-a-list-of-accounts.json b/tests/Fixtures/Saloon/Accounts/fetch-a-list-of-accounts.json
index e77fde0..a7dc74b 100644
--- a/tests/Fixtures/Saloon/Accounts/fetch-a-list-of-accounts.json
+++ b/tests/Fixtures/Saloon/Accounts/fetch-a-list-of-accounts.json
@@ -1 +1,24 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:17 GMT","Content-Type":"application\/json","Content-Length":"26669","Connection":"keep-alive","ratelimit-reset":"43","x-ratelimit-remaining-minute":"999","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"999","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c7222ed45279-LHR"},"data":"[{\"id\":89,\"uuid\":\"ae7ae7c6-7c5e-4ae5-97f0-f8387cb1120f\",\"account_no\":\"9901\",\"name\":\"Balance transfer\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":68,\"is_active\":true,\"is_locked\":true},{\"id\":90,\"uuid\":\"da66fe87-e5e1-4edb-b721-a13a0b0daba0\",\"account_no\":\"9900\",\"name\":\"Corrections\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":68,\"is_active\":true,\"is_locked\":true},{\"id\":91,\"uuid\":\"28ba9ef8-6bfe-4078-bad1-68e443dcf1f9\",\"account_no\":\"9200\",\"name\":\"Annual profit or loss\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":68,\"is_active\":true,\"is_locked\":true},{\"id\":92,\"uuid\":\"a7f82855-0e09-4135-bda3-66bbd868bc40\",\"account_no\":\"9101\",\"name\":\"Closing balance\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":68,\"is_active\":true,\"is_locked\":true},{\"id\":93,\"uuid\":\"9bb8d55d-06b5-47d5-8f15-e145eb23ea00\",\"account_no\":\"9100\",\"name\":\"Opening balance\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":68,\"is_active\":true,\"is_locked\":true},{\"id\":94,\"uuid\":\"aa154d13-bd1c-4994-8c20-ff74a7938570\",\"account_no\":\"9000\",\"name\":\"Profit and Loss Account\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":68,\"is_active\":true,\"is_locked\":true},{\"id\":95,\"uuid\":\"08cc1d29-703f-48ff-9247-b928ff3f9f9a\",\"account_no\":\"6999\",\"name\":\"Exchange gains\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":62,\"is_active\":true,\"is_locked\":true},{\"id\":96,\"uuid\":\"25787193-cffa-4936-ba50-02e75dad9719\",\"account_no\":\"6949\",\"name\":\"Exchange losses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":63,\"is_active\":true,\"is_locked\":true},{\"id\":97,\"uuid\":\"60f60e69-6bdd-4a31-a3d9-b4900c22acfc\",\"account_no\":\"6945\",\"name\":\"Rounding differences\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":63,\"is_active\":true,\"is_locked\":true},{\"id\":98,\"uuid\":\"97dde1dc-238c-4a8c-9973-8d7b02a65fed\",\"account_no\":\"4900\",\"name\":\"Cash discounts\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":55,\"is_active\":true,\"is_locked\":true},{\"id\":99,\"uuid\":\"7d109e30-4dc5-484e-ad18-b816e632b344\",\"account_no\":\"4200\",\"name\":\"Purchase of merchandise\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":57,\"is_active\":true,\"is_locked\":true},{\"id\":100,\"uuid\":\"882d6dc8-8139-4b87-99be-c12d665b2485\",\"account_no\":\"3800\",\"name\":\"Cash discounts\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":true},{\"id\":101,\"uuid\":\"a726ea8f-2cd4-42ab-9658-efbb82a54323\",\"account_no\":\"3200\",\"name\":\"Income from Trading\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":52,\"is_active\":true,\"is_locked\":true},{\"id\":102,\"uuid\":\"35f8ac47-b620-449a-a88d-584488df43de\",\"account_no\":\"2203\",\"name\":\"Service import tax\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":46,\"is_active\":true,\"is_locked\":true},{\"id\":103,\"uuid\":\"7f28e535-4edf-446f-a974-98ccdd5344ce\",\"account_no\":\"2202\",\"name\":\"VAT compensation accounting method\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":46,\"is_active\":true,\"is_locked\":true},{\"id\":104,\"uuid\":\"63512f9f-902c-4614-bb66-871f7849cee4\",\"account_no\":\"2201\",\"name\":\"Turnover tax on receivables\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":46,\"is_active\":true,\"is_locked\":true},{\"id\":105,\"uuid\":\"5f361329-405c-4747-a0ed-d18962d4c072\",\"account_no\":\"2200\",\"name\":\"Turnover tax\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":46,\"is_active\":true,\"is_locked\":true},{\"id\":106,\"uuid\":\"6ac6ae58-6be6-4766-b4fc-071500afb14a\",\"account_no\":\"2030\",\"name\":\"Advance payments from customers\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":47,\"is_active\":true,\"is_locked\":true},{\"id\":107,\"uuid\":\"f3b1d218-7171-4474-aac9-55375bae6c09\",\"account_no\":\"2000\",\"name\":\"Liabilities trade payables\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":47,\"is_active\":true,\"is_locked\":true},{\"id\":108,\"uuid\":\"5cedefb7-910b-442f-a5f9-5d691aff8f6d\",\"account_no\":\"1174\",\"name\":\"Input tax correction\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":true},{\"id\":109,\"uuid\":\"f374f3fc-108a-4042-bcb1-2db908ae52e4\",\"account_no\":\"1173\",\"name\":\"Pre-tax reduction\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":true},{\"id\":110,\"uuid\":\"14e8638e-68c5-41ae-b47a-750559169a9d\",\"account_no\":\"1172\",\"name\":\"Tax equalization accounting method\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":true},{\"id\":111,\"uuid\":\"b6387b85-21da-4b2f-92f6-8e0a63e80ac7\",\"account_no\":\"1171\",\"name\":\"Input tax on investments and other operating expenses\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":true},{\"id\":112,\"uuid\":\"b1bc1442-6017-4e28-b693-ba9a63a2f2f9\",\"account_no\":\"1170\",\"name\":\"Input tax on cost of material and services\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":true},{\"id\":113,\"uuid\":\"3041fa24-408f-4888-93dd-1812e03c91af\",\"account_no\":\"1100\",\"name\":\"Accounts receivable trade and services\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":42,\"is_active\":true,\"is_locked\":true},{\"id\":114,\"uuid\":\"d3289dee-1fcd-46c3-980a-12164bd73e53\",\"account_no\":\"1029\",\"name\":\"Bank\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":43,\"is_active\":true,\"is_locked\":true},{\"id\":115,\"uuid\":\"bf92a614-6bc9-4414-a2b8-f58200aab291\",\"account_no\":\"1020\",\"name\":\"Muster Bank\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":43,\"is_active\":true,\"is_locked\":false},{\"id\":116,\"uuid\":\"5ca2f16b-5c10-437a-9883-cf30084ad5df\",\"account_no\":\"1021\",\"name\":\"Aareal Bank AG\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":43,\"is_active\":true,\"is_locked\":false},{\"id\":117,\"uuid\":\"20374226-461a-498e-8c02-9df8dfa9ac4a\",\"account_no\":\"1090\",\"name\":\"Transfer account\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":false},{\"id\":118,\"uuid\":\"2c9fb342-1368-4a01-9510-fa1fd1441e5e\",\"account_no\":\"1091\",\"name\":\"Transitory account\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":false},{\"id\":119,\"uuid\":\"a1566e66-3740-44d9-b1ea-b79c06b63c5c\",\"account_no\":\"1099\",\"name\":\"Unclear amounts\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":false},{\"id\":120,\"uuid\":\"d47807e8-f34c-41fd-99d0-0220f0f444b4\",\"account_no\":\"1109\",\"name\":\"VA receivables trade and service\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":42,\"is_active\":true,\"is_locked\":false},{\"id\":121,\"uuid\":\"bb631a7d-7685-4f36-99dd-b36441e7b152\",\"account_no\":\"1130\",\"name\":\"Advance payments to suppliers\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":42,\"is_active\":true,\"is_locked\":false},{\"id\":122,\"uuid\":\"a25b1112-ce96-4b35-94b1-56be942afdc7\",\"account_no\":\"1140\",\"name\":\"Loans\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":72,\"is_active\":true,\"is_locked\":false},{\"id\":123,\"uuid\":\"a1154df0-b5d0-495a-b121-304ed2e3b0c1\",\"account_no\":\"1175\",\"name\":\"Settlement account VAT\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":false},{\"id\":124,\"uuid\":\"e44a6373-a14c-455f-a4af-bad58faf16b3\",\"account_no\":\"1176\",\"name\":\"Withholding tax\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":41,\"is_active\":true,\"is_locked\":false},{\"id\":125,\"uuid\":\"3e745721-9b51-4911-a617-a5490c8a8c65\",\"account_no\":\"1183\",\"name\":\"CA Accident insurance\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":73,\"is_active\":true,\"is_locked\":false},{\"id\":126,\"uuid\":\"3bbd14a2-ff1b-4d33-8c3b-93b2e6b4cd21\",\"account_no\":\"1184\",\"name\":\"CA Sick pay insurance\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":73,\"is_active\":true,\"is_locked\":false},{\"id\":127,\"uuid\":\"1680d8ab-754d-4c45-9c1d-e09f3edb999a\",\"account_no\":\"1188\",\"name\":\"CA Source taxation\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":73,\"is_active\":true,\"is_locked\":false},{\"id\":128,\"uuid\":\"87b4e877-afde-437a-8506-73a7b5074371\",\"account_no\":\"1200\",\"name\":\"Trade goods inventory\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":74,\"is_active\":true,\"is_locked\":false},{\"id\":129,\"uuid\":\"f7e321f6-3aad-4f72-a499-57b1739a4ac5\",\"account_no\":\"1280\",\"name\":\"Not invoiced services\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":74,\"is_active\":true,\"is_locked\":false},{\"id\":130,\"uuid\":\"640053b5-9229-4379-aeed-4c8682f0b7ff\",\"account_no\":\"1300\",\"name\":\"Prepaid expenses\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":75,\"is_active\":true,\"is_locked\":false},{\"id\":131,\"uuid\":\"296fb22f-fee5-4780-a3ee-8ef734bf26ef\",\"account_no\":\"1500\",\"name\":\"Machinery\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":70,\"is_active\":true,\"is_locked\":false},{\"id\":132,\"uuid\":\"e0f73065-7e5d-4f56-9b38-38ba9b2deb85\",\"account_no\":\"1510\",\"name\":\"Movable property, furnishings\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":70,\"is_active\":true,\"is_locked\":false},{\"id\":133,\"uuid\":\"024e5539-8526-4e3f-9e4f-4f72732ea61f\",\"account_no\":\"1520\",\"name\":\"Office machinery, computers, communication\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":70,\"is_active\":true,\"is_locked\":false},{\"id\":134,\"uuid\":\"6d32fe4a-36dc-4efe-8728-de78f8e38cae\",\"account_no\":\"1530\",\"name\":\"Vehicles\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":70,\"is_active\":true,\"is_locked\":false},{\"id\":135,\"uuid\":\"c1a0bb86-1032-44a8-a908-43acd9c03597\",\"account_no\":\"2100\",\"name\":\"Current account A\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":false},{\"id\":136,\"uuid\":\"a9c25cbe-3d97-4832-8c45-c4304d26adb5\",\"account_no\":\"2190\",\"name\":\"Credit card\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":false},{\"id\":137,\"uuid\":\"23a23221-17b7-4746-9428-5ccf54709f32\",\"account_no\":\"2270\",\"name\":\"Due to BVG\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":false},{\"id\":138,\"uuid\":\"51e92708-d03b-43fc-9f4a-e5512303ec56\",\"account_no\":\"2271\",\"name\":\"Due to AHV\\\/ALV\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":false},{\"id\":139,\"uuid\":\"f5fd6c72-2894-4146-9473-de91b8492181\",\"account_no\":\"2272\",\"name\":\"Due to FAK\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":false},{\"id\":140,\"uuid\":\"e54dc466-03fc-4005-b1bf-241838c87f48\",\"account_no\":\"2273\",\"name\":\"Due to UVG\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":false},{\"id\":141,\"uuid\":\"1b37662b-2284-462e-bb27-00a274b67a6e\",\"account_no\":\"2274\",\"name\":\"Due to KVG\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":false},{\"id\":142,\"uuid\":\"2d43e716-1194-4761-8503-a1daed5aa859\",\"account_no\":\"2279\",\"name\":\"Tax at source due\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":false},{\"id\":143,\"uuid\":\"68a67ecb-373a-467f-9ccf-46791a3323ca\",\"account_no\":\"2300\",\"name\":\"Unpaid expenses\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":78,\"is_active\":true,\"is_locked\":false},{\"id\":144,\"uuid\":\"07f4594b-b481-4d73-8b81-a458e78a94d8\",\"account_no\":\"2400\",\"name\":\"Loan\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":145,\"uuid\":\"53b6c6ff-c991-4c4d-bb5f-a7c610b5518a\",\"account_no\":\"2560\",\"name\":\"Liabilities to shareholder A\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":81,\"is_active\":true,\"is_locked\":false},{\"id\":146,\"uuid\":\"1629253f-dd07-4890-9486-13861b6eda21\",\"account_no\":\"2800\",\"name\":\"Capital\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":83,\"is_active\":true,\"is_locked\":false},{\"id\":147,\"uuid\":\"fd4f6b99-3bf7-4587-8e62-1f3b95016a45\",\"account_no\":\"2950\",\"name\":\"Legal reserve Retained earnings\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":84,\"is_active\":true,\"is_locked\":false},{\"id\":148,\"uuid\":\"5572e5ce-acec-488e-b77c-4e35e60f0724\",\"account_no\":\"2970\",\"name\":\"Earned Surplus carried forward or loss carried forward\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":84,\"is_active\":true,\"is_locked\":false},{\"id\":149,\"uuid\":\"4d81c570-4155-4d48-94b5-fd7389a921dd\",\"account_no\":\"2979\",\"name\":\"Annual profit or annual loss\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":84,\"is_active\":true,\"is_locked\":false},{\"id\":150,\"uuid\":\"d2547adf-ef80-4634-8fc3-7bdf5b10e487\",\"account_no\":\"3000\",\"name\":\"Production yield\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":86,\"is_active\":true,\"is_locked\":false},{\"id\":151,\"uuid\":\"b30d8f33-d93a-4cdb-8da3-820707c4368a\",\"account_no\":\"3400\",\"name\":\"Income from Services\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":88,\"is_active\":true,\"is_locked\":false},{\"id\":152,\"uuid\":\"167c33c8-e4f3-42c3-b042-25d9a4112cde\",\"account_no\":\"3600\",\"name\":\"Additional income from deliveries and services\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":90,\"is_active\":true,\"is_locked\":false},{\"id\":153,\"uuid\":\"8053fb34-3835-44a9-b8fa-8a1b8b55804b\",\"account_no\":\"3680\",\"name\":\"Other revenues\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":91,\"is_active\":true,\"is_locked\":false},{\"id\":154,\"uuid\":\"dae82d64-636f-4c8b-946e-46776f13988a\",\"account_no\":\"3801\",\"name\":\"Rebates and price deductions\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":false},{\"id\":155,\"uuid\":\"949b20c6-ce63-4497-b3c8-d891b5821332\",\"account_no\":\"3802\",\"name\":\"Reimbursements\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":false},{\"id\":156,\"uuid\":\"0305040f-1464-49d9-a501-0bc478a7f58f\",\"account_no\":\"3803\",\"name\":\"Commission to third parties\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":false},{\"id\":157,\"uuid\":\"c4ee6946-f507-4e80-9a3f-4ab5687f8854\",\"account_no\":\"3804\",\"name\":\"Collection expenses\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":false},{\"id\":158,\"uuid\":\"f0da02f8-f3b3-4203-b795-2e447d8aeadd\",\"account_no\":\"3805\",\"name\":\"Losses from receivables\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":false},{\"id\":159,\"uuid\":\"bdcc1560-90df-484e-8001-79cea70ed7b0\",\"account_no\":\"3806\",\"name\":\"Exchange rate differences\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":50,\"is_active\":true,\"is_locked\":false},{\"id\":160,\"uuid\":\"4384dbb5-cca9-4182-80e1-4b5f40323f80\",\"account_no\":\"3940\",\"name\":\"Changes in inventories of unbilled services\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":93,\"is_active\":true,\"is_locked\":false},{\"id\":161,\"uuid\":\"7aa88889-7e32-48d3-af4f-9382abce310d\",\"account_no\":\"4000\",\"name\":\"Materials procurement A\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":94,\"is_active\":true,\"is_locked\":false},{\"id\":162,\"uuid\":\"c5652fcd-c06f-4841-add5-85d6ec5cdf20\",\"account_no\":\"4208\",\"name\":\"Changes in inventories\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":57,\"is_active\":true,\"is_locked\":false},{\"id\":163,\"uuid\":\"6451edd3-59bf-4160-9b1b-bfc945c5404a\",\"account_no\":\"4270\",\"name\":\"Incoming freight charges\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":95,\"is_active\":true,\"is_locked\":false},{\"id\":164,\"uuid\":\"ecba97fe-4744-4274-9b0f-f52d39542d1f\",\"account_no\":\"4400\",\"name\":\"Purchase of services\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":97,\"is_active\":true,\"is_locked\":false},{\"id\":165,\"uuid\":\"289f773c-5235-4a55-a423-aaf93249020c\",\"account_no\":\"4620\",\"name\":\"Other expenses for merchandise\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":99,\"is_active\":true,\"is_locked\":false},{\"id\":166,\"uuid\":\"82066d1d-55a5-4102-ac3f-ac2e986c67f5\",\"account_no\":\"4640\",\"name\":\"Other expenses for services\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":100,\"is_active\":true,\"is_locked\":false},{\"id\":167,\"uuid\":\"10ac3384-5b84-4978-9c53-736e271b15e5\",\"account_no\":\"4650\",\"name\":\"Expenses for packaging\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":168,\"uuid\":\"008aa22c-52fb-4c34-894c-2b8f87662288\",\"account_no\":\"4660\",\"name\":\"Change in reserve for warranties\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":102,\"is_active\":true,\"is_locked\":false},{\"id\":169,\"uuid\":\"aceff1a4-01f5-4b4f-a2c8-50b2a5ffd137\",\"account_no\":\"4700\",\"name\":\"Incoming freight charges\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":170,\"uuid\":\"031ef951-3d89-4e62-b106-9f4bbf51f950\",\"account_no\":\"4800\",\"name\":\"Changes in inventories of trading goods\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":105,\"is_active\":true,\"is_locked\":false},{\"id\":171,\"uuid\":\"acde653f-f5ef-4ef1-a90f-8aa6ba9e9648\",\"account_no\":\"4901\",\"name\":\"Rebates and price deductions\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":55,\"is_active\":true,\"is_locked\":false},{\"id\":172,\"uuid\":\"999cdd84-854e-4f24-90af-9f30f0059cbb\",\"account_no\":\"4906\",\"name\":\"Exchange rate differences\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":55,\"is_active\":true,\"is_locked\":false},{\"id\":173,\"uuid\":\"906aa9a5-5b97-4bf1-b3fa-3181092a4fbd\",\"account_no\":\"5000\",\"name\":\"Salaries\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":174,\"uuid\":\"03a1bd3e-3462-4b9d-a96e-4b0a6739a1f2\",\"account_no\":\"5001\",\"name\":\"Allowances\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":175,\"uuid\":\"652ff9f3-ba54-4bab-b5f2-f992be404a0c\",\"account_no\":\"5002\",\"name\":\"Profit-sharing\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":176,\"uuid\":\"8c8f1071-9730-472a-a3ac-969795905e18\",\"account_no\":\"5003\",\"name\":\"Commissions\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":177,\"uuid\":\"d4723387-3c4e-431d-ad6d-e851a476c6b3\",\"account_no\":\"5005\",\"name\":\"Social security benefits\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":178,\"uuid\":\"fef6eddf-33d8-464d-aa6b-d2c942dbaaef\",\"account_no\":\"5008\",\"name\":\"Other personnel expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":179,\"uuid\":\"a893ef11-c4b7-4c49-baf6-542afb8a4cb9\",\"account_no\":\"5700\",\"name\":\"AHV, IV, EO, ALV\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":180,\"uuid\":\"4a2c4cd1-0352-423d-ac0e-9696b4adc089\",\"account_no\":\"5710\",\"name\":\"FAK\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":181,\"uuid\":\"4cd549de-3c1a-439d-b2ac-bc19c19af954\",\"account_no\":\"5720\",\"name\":\"Occupational pension\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":182,\"uuid\":\"65c483db-0479-4a68-8ce9-7cc12f3aa086\",\"account_no\":\"5730\",\"name\":\"Accident insurance\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":183,\"uuid\":\"5b55701d-406c-48ec-86a1-2781693a4bcc\",\"account_no\":\"5740\",\"name\":\"Daily sickness insurance\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":184,\"uuid\":\"6cc41a58-6b7e-43e0-bf36-116356b6ca40\",\"account_no\":\"5790\",\"name\":\"Tax at source\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":185,\"uuid\":\"5d5129d7-ffe8-482d-ac29-6dabb2d54628\",\"account_no\":\"5810\",\"name\":\"Education and training\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":186,\"uuid\":\"b5322e4a-1360-4a14-a6f9-dfdee88b5899\",\"account_no\":\"5820\",\"name\":\"Expenses, actual\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":112,\"is_active\":true,\"is_locked\":false},{\"id\":187,\"uuid\":\"c32e21e3-b3f6-4bbd-a1f7-a31be98bd3e3\",\"account_no\":\"5832\",\"name\":\"Expenses, travel, car, overnight stay\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":113,\"is_active\":true,\"is_locked\":false},{\"id\":188,\"uuid\":\"c81504dd-bcd9-4533-a09a-81a0cf9c3855\",\"account_no\":\"5880\",\"name\":\"Personnel events\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":114,\"is_active\":true,\"is_locked\":false},{\"id\":189,\"uuid\":\"05147f94-cee7-4768-b966-53157a526249\",\"account_no\":\"5890\",\"name\":\"Private share Employee expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":115,\"is_active\":true,\"is_locked\":false},{\"id\":190,\"uuid\":\"d4e4af6d-16a0-4444-a2de-a966e78c94c9\",\"account_no\":\"5891\",\"name\":\"Compensation in kind\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":115,\"is_active\":true,\"is_locked\":false},{\"id\":191,\"uuid\":\"e0a57735-1cf7-4baf-bdcf-0310d0ad2de7\",\"account_no\":\"6000\",\"name\":\"Rent\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":192,\"uuid\":\"d78e76b4-fa5a-4961-b3fb-d043b20b9e9d\",\"account_no\":\"6030\",\"name\":\"Additional costs\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":193,\"uuid\":\"465fc131-1527-44f3-80d2-bf37ca1feea6\",\"account_no\":\"6040\",\"name\":\"Cleaning\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":194,\"uuid\":\"267a1614-8f2d-48f4-bedb-336684c9d74d\",\"account_no\":\"6100\",\"name\":\"Expenses Machinery and equipment\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":119,\"is_active\":true,\"is_locked\":false},{\"id\":195,\"uuid\":\"94a76f53-e7f3-4d03-af95-a213b51fec6a\",\"account_no\":\"6200\",\"name\":\"Repairs\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":121,\"is_active\":true,\"is_locked\":false},{\"id\":196,\"uuid\":\"d5c36c4d-fa30-49f7-a676-8fb21cf9db52\",\"account_no\":\"6210\",\"name\":\"Fuel\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":121,\"is_active\":true,\"is_locked\":false},{\"id\":197,\"uuid\":\"fa4a7122-e89d-4789-a45f-081091a2854a\",\"account_no\":\"6220\",\"name\":\"Vehicle Insurance\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":121,\"is_active\":true,\"is_locked\":false},{\"id\":198,\"uuid\":\"9abea5be-431b-4643-8d0f-1a317f660cc7\",\"account_no\":\"6260\",\"name\":\"Vehicle Leasing\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":121,\"is_active\":true,\"is_locked\":false},{\"id\":199,\"uuid\":\"fdd1f319-c187-4b97-ab36-6d66909c06c6\",\"account_no\":\"6270\",\"name\":\"Private share Vehicle expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":121,\"is_active\":true,\"is_locked\":false},{\"id\":200,\"uuid\":\"0f8a7a7e-19f5-4135-ade6-0a0e8b76824b\",\"account_no\":\"6300\",\"name\":\"Insurance Premiums\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":123,\"is_active\":true,\"is_locked\":false},{\"id\":201,\"uuid\":\"1485c8f7-7ea0-45c4-99c3-025bdb3d1c64\",\"account_no\":\"6360\",\"name\":\"Duties and charges\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":124,\"is_active\":true,\"is_locked\":false},{\"id\":202,\"uuid\":\"c76ec231-b764-4bd4-b76a-968a5e9b1f0d\",\"account_no\":\"6400\",\"name\":\"Electricity\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":126,\"is_active\":true,\"is_locked\":false},{\"id\":203,\"uuid\":\"5eeaae2b-5aa0-44c9-932c-9e739344c4c3\",\"account_no\":\"6500\",\"name\":\"Office material\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":128,\"is_active\":true,\"is_locked\":false},{\"id\":204,\"uuid\":\"6b736f4f-480a-4e95-aa0b-748432c4fa7f\",\"account_no\":\"6510\",\"name\":\"Communication costs\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":128,\"is_active\":true,\"is_locked\":false},{\"id\":205,\"uuid\":\"1e4b767d-2c2a-4404-bf48-b550311d4381\",\"account_no\":\"6512\",\"name\":\"Internet\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":128,\"is_active\":true,\"is_locked\":false},{\"id\":206,\"uuid\":\"87087079-0bbe-4280-a4a6-2f52d445ee37\",\"account_no\":\"6513\",\"name\":\"Postage\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":128,\"is_active\":true,\"is_locked\":false},{\"id\":207,\"uuid\":\"97191e74-0c6c-4fce-8776-1b94f12df03d\",\"account_no\":\"6530\",\"name\":\"Accounting expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":128,\"is_active\":true,\"is_locked\":false},{\"id\":208,\"uuid\":\"67564f25-9836-4e40-80bb-4d53c367a030\",\"account_no\":\"6559\",\"name\":\"Other administrative expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":128,\"is_active\":true,\"is_locked\":false},{\"id\":209,\"uuid\":\"3802c1a5-de7c-4df8-8537-c2798462f6a2\",\"account_no\":\"6570\",\"name\":\"IT costs\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":129,\"is_active\":true,\"is_locked\":false},{\"id\":210,\"uuid\":\"0f827377-0de4-4dfd-96f8-77ed22ca9241\",\"account_no\":\"6600\",\"name\":\"Advertising\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":131,\"is_active\":true,\"is_locked\":false},{\"id\":211,\"uuid\":\"9ffb28c9-a756-4b67-98f2-87e67ad888f4\",\"account_no\":\"6640\",\"name\":\"Travel expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":132,\"is_active\":true,\"is_locked\":false},{\"id\":212,\"uuid\":\"3fce07c0-355a-4146-8ae8-620f61ca6e81\",\"account_no\":\"6641\",\"name\":\"Representation expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":132,\"is_active\":true,\"is_locked\":false},{\"id\":213,\"uuid\":\"b880649b-fa93-4bab-8d24-c7ae7bcab707\",\"account_no\":\"6800\",\"name\":\"Depreciation on financial assets\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":133,\"is_active\":true,\"is_locked\":false},{\"id\":214,\"uuid\":\"4c03eda7-8ab9-4c08-a262-6eee7b96ed18\",\"account_no\":\"6900\",\"name\":\"Interest expenses\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":63,\"is_active\":true,\"is_locked\":false},{\"id\":215,\"uuid\":\"dc969150-9018-4a6c-8116-71b6e45d8cfe\",\"account_no\":\"6940\",\"name\":\"Bank charges\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":63,\"is_active\":true,\"is_locked\":false},{\"id\":216,\"uuid\":\"624dc8b1-1c19-4211-adf5-e8c0a3ca936b\",\"account_no\":\"6950\",\"name\":\"Return on bank deposits\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":62,\"is_active\":true,\"is_locked\":false},{\"id\":217,\"uuid\":\"4f4add8e-28d4-4319-a974-011c879edad2\",\"account_no\":\"8000\",\"name\":\"Non-company related expenditures\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":65,\"is_active\":true,\"is_locked\":false},{\"id\":218,\"uuid\":\"1f55bd3e-9001-4027-98c6-af98ff22fe17\",\"account_no\":\"8100\",\"name\":\"Non-company related income\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":65,\"is_active\":true,\"is_locked\":false},{\"id\":219,\"uuid\":\"f1e17bc3-0738-4dba-97df-723e3c873cde\",\"account_no\":\"8505\",\"name\":\"Extraordinary losses on receivables\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":66,\"is_active\":true,\"is_locked\":false},{\"id\":220,\"uuid\":\"bcfc3173-7220-4e7c-ae3e-6d51b3878a36\",\"account_no\":\"8514\",\"name\":\"Extraordinary profits from the sale of fixed assets\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":66,\"is_active\":true,\"is_locked\":false},{\"id\":221,\"uuid\":\"8bb30ef4-d2ae-4411-96a6-21bfcdf265ac\",\"account_no\":\"8900\",\"name\":\"Direct taxes\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":134,\"is_active\":true,\"is_locked\":false}]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:37:09 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "43293",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a50fd12df0bbc68-ZRH",
+ "x-ratelimit-remaining-minute": "999",
+ "x-ratelimit-limit-minute": "1000",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "52",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":116,\"uuid\":\"9349c88b-d487-45eb-8d55-bf3b72b360aa\",\"account_no\":\"9901\",\"name\":\"Saldo\\u00fcbernahme\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true},{\"id\":117,\"uuid\":\"381eebf4-c508-4c30-a44c-22f269514034\",\"account_no\":\"9900\",\"name\":\"Korrekturen\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true},{\"id\":118,\"uuid\":\"3a544dc8-646c-4ffe-a14e-c7a493afd9a1\",\"account_no\":\"9200\",\"name\":\"Jahresgewinn oder Jahresverlust\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true},{\"id\":119,\"uuid\":\"d552cd0f-df39-4819-b43c-9a225fe9e91c\",\"account_no\":\"9101\",\"name\":\"Schlussbilanz\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true},{\"id\":120,\"uuid\":\"711fd862-5f91-489b-a6bd-bfa751987114\",\"account_no\":\"9100\",\"name\":\"Er\\u00f6ffnungsbilanz\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true},{\"id\":121,\"uuid\":\"0f9a5c89-e0e4-486b-87ce-7fb82ba637f8\",\"account_no\":\"9000\",\"name\":\"Erfolgsrechnung\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true},{\"id\":122,\"uuid\":\"e0988b15-7110-45df-8d36-8b319d28fe9f\",\"account_no\":\"6999\",\"name\":\"W\\u00e4hrungsgewinne\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":92,\"is_active\":true,\"is_locked\":true},{\"id\":123,\"uuid\":\"61549379-99dd-4af7-8cf1-01438b70696e\",\"account_no\":\"6949\",\"name\":\"W\\u00e4hrungsverluste\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":93,\"is_active\":true,\"is_locked\":true},{\"id\":124,\"uuid\":\"edcb4236-4585-4570-87cd-74ab1dc68815\",\"account_no\":\"6945\",\"name\":\"Rundungsdifferenz\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":93,\"is_active\":true,\"is_locked\":true},{\"id\":125,\"uuid\":\"df77c08c-e527-4e8e-97b1-0666d4138914\",\"account_no\":\"4900\",\"name\":\"Skonti\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":85,\"is_active\":true,\"is_locked\":true},{\"id\":126,\"uuid\":\"7c25e4df-40d9-460c-8f3c-813a1420ee05\",\"account_no\":\"4200\",\"name\":\"Einkauf Handelsware\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":87,\"is_active\":true,\"is_locked\":true},{\"id\":127,\"uuid\":\"247b2c2f-8841-4cfd-8f0b-374a79724501\",\"account_no\":\"3800\",\"name\":\"Skonti\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":true},{\"id\":128,\"uuid\":\"ae4fa23f-3624-4d89-b36e-d238613912a5\",\"account_no\":\"3200\",\"name\":\"Handelserl\\u00f6s\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":82,\"is_active\":true,\"is_locked\":true},{\"id\":129,\"uuid\":\"15f2c1d3-3266-46be-b76c-422535a120e8\",\"account_no\":\"2203\",\"name\":\"Bezugsteuer\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":true},{\"id\":130,\"uuid\":\"061afb0d-d074-4839-b11e-58997a0b7820\",\"account_no\":\"2202\",\"name\":\"Umsatzsteuerausgleich Abrechnungsmethode\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":true},{\"id\":131,\"uuid\":\"046fa5b2-f1bb-4f32-8593-0985263c1f92\",\"account_no\":\"2201\",\"name\":\"Abrechnungskonto MWST\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":true},{\"id\":132,\"uuid\":\"2603055b-ef8b-49dd-a6a9-074476aa9ad4\",\"account_no\":\"2200\",\"name\":\"Geschuldete Mehrwertsteuer (Umsatzsteuer)\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":true},{\"id\":133,\"uuid\":\"b6317374-9466-46cb-9286-daf0e1509cfa\",\"account_no\":\"2030\",\"name\":\"Erhaltene Anzahlungen von Dritten\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":true},{\"id\":134,\"uuid\":\"2ce05dce-826e-4d6a-9d93-f64996caf1ab\",\"account_no\":\"2000\",\"name\":\"Verbindlichkeiten Material- \\\/ Warenaufwand\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":77,\"is_active\":true,\"is_locked\":true},{\"id\":135,\"uuid\":\"510fc5dd-efdb-4abd-a001-9d4fda0d82e0\",\"account_no\":\"1174\",\"name\":\"Vorsteuerkorrektur\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":true},{\"id\":136,\"uuid\":\"8f7a93b6-3deb-49e3-9c40-768733a2c505\",\"account_no\":\"1173\",\"name\":\"Vorsteuerk\\u00fcrzung\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":true},{\"id\":137,\"uuid\":\"3ddba6eb-a3d9-4359-8f5b-87fc9c9acc1f\",\"account_no\":\"1172\",\"name\":\"Vorsteuerausgleich Abrechnungsmethode\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":true},{\"id\":138,\"uuid\":\"0ad875b2-0363-416f-ac2d-56babb4a2b56\",\"account_no\":\"1171\",\"name\":\"Vorsteuer Inv., \\u00fcbr. Betriebsaufwand Kl.1 5-8\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":true},{\"id\":139,\"uuid\":\"02bf49d3-aa69-4ffb-a79f-849857dbb86f\",\"account_no\":\"1170\",\"name\":\"Vorsteuer Material, Waren, DL - Kl. 4\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":true},{\"id\":140,\"uuid\":\"09f46f08-dd96-4f91-8bef-f6459b0aa451\",\"account_no\":\"1100\",\"name\":\"Forderungen aus Lieferungen und Leistungen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":72,\"is_active\":true,\"is_locked\":true},{\"id\":141,\"uuid\":\"c032ec9e-356b-4c29-824a-511531342cad\",\"account_no\":\"1029\",\"name\":\"Bank\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":73,\"is_active\":true,\"is_locked\":true},{\"id\":142,\"uuid\":\"86c976cf-609e-4784-8729-60bd7c9e9120\",\"account_no\":\"1020\",\"name\":\"Muster Bank\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":73,\"is_active\":true,\"is_locked\":false},{\"id\":143,\"uuid\":\"4e5b8ad9-44bb-428c-a9e9-30cad9770e41\",\"account_no\":\"1090\",\"name\":\"Transferkonto\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":105,\"is_active\":true,\"is_locked\":false},{\"id\":144,\"uuid\":\"c86c7762-4e64-4501-9690-bdc11ed7c180\",\"account_no\":\"1091\",\"name\":\"Lohndurchlaufkonto\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":105,\"is_active\":true,\"is_locked\":false},{\"id\":145,\"uuid\":\"2f81b843-7a20-4e52-9f63-b76b50f87a35\",\"account_no\":\"1099\",\"name\":\"Unklare Betr\\u00e4ge\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":105,\"is_active\":true,\"is_locked\":false},{\"id\":146,\"uuid\":\"a4c63d6d-6231-4b9e-a661-d95bbf74f54d\",\"account_no\":\"1109\",\"name\":\"Wertberichtigung Forderungen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":72,\"is_active\":true,\"is_locked\":false},{\"id\":147,\"uuid\":\"195c8bf0-4362-4339-84d4-f6762ea99c1a\",\"account_no\":\"1120\",\"name\":\"Forderungen Aktion\\u00e4r\\\/Gesellschafter\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":72,\"is_active\":true,\"is_locked\":false},{\"id\":148,\"uuid\":\"01f3a20d-9f9e-4244-8c4c-b02e540442e1\",\"account_no\":\"1130\",\"name\":\"Vorauszahlungen an Lieferanten\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":72,\"is_active\":true,\"is_locked\":false},{\"id\":149,\"uuid\":\"a681d1af-e023-4d91-9014-dd64e6258675\",\"account_no\":\"1140\",\"name\":\"Darlehen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":106,\"is_active\":true,\"is_locked\":false},{\"id\":150,\"uuid\":\"e0f5e054-a765-4b14-a964-90646e1961d8\",\"account_no\":\"1175\",\"name\":\"Abrechnungskonto MWST\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":false},{\"id\":151,\"uuid\":\"93247470-7eb0-45aa-9965-cf6bccbcb070\",\"account_no\":\"1176\",\"name\":\"Verrechnungssteuer\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":false},{\"id\":152,\"uuid\":\"6e21e80f-e903-4b28-831c-3ef9b0e3c9a4\",\"account_no\":\"1177\",\"name\":\"Forderungen Oberzolldirektion\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":71,\"is_active\":true,\"is_locked\":false},{\"id\":153,\"uuid\":\"b83ce587-389f-47b3-8c34-8349004005f6\",\"account_no\":\"1183\",\"name\":\"Kontokorrent Unfallversicherung\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":154,\"uuid\":\"41ddff0f-7f46-4953-9c72-317765ae0870\",\"account_no\":\"1184\",\"name\":\"Kontokorrent Krankentaggeldversicherung\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":155,\"uuid\":\"38125f72-155e-4386-bc5b-52ea0cab8d4f\",\"account_no\":\"1188\",\"name\":\"Kontokorrent Quellensteuer\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":156,\"uuid\":\"40a6d360-27b2-41ca-83ef-c3a85332775c\",\"account_no\":\"1191\",\"name\":\"Kautionen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":157,\"uuid\":\"03682a85-4109-46ba-902e-25ec259d7da8\",\"account_no\":\"1193\",\"name\":\"Mietzinsdepot\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":107,\"is_active\":true,\"is_locked\":false},{\"id\":158,\"uuid\":\"f3074523-d7a6-4743-baa4-adaa100a7956\",\"account_no\":\"1200\",\"name\":\"Lager Handelsware\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":108,\"is_active\":true,\"is_locked\":false},{\"id\":159,\"uuid\":\"691bfb1e-8e57-4f99-b36f-3edbf8fe0236\",\"account_no\":\"1209\",\"name\":\"Wertberichtigungen Handelswaren\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":108,\"is_active\":true,\"is_locked\":false},{\"id\":160,\"uuid\":\"dffab62d-73d4-40f5-a65b-b383ab0ccea4\",\"account_no\":\"1280\",\"name\":\"Nicht fakturierte Dienstleistungen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":108,\"is_active\":true,\"is_locked\":false},{\"id\":161,\"uuid\":\"70bdb504-c657-442a-bcd1-402f23ec89ef\",\"account_no\":\"1289\",\"name\":\"Wertberichtigungen nicht fakturierte Dienstleistungen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":108,\"is_active\":true,\"is_locked\":false},{\"id\":162,\"uuid\":\"fcfabe0c-ae05-4e05-97f8-d82910598418\",\"account_no\":\"1300\",\"name\":\"Bezahlter Aufwand des Folgejahres\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":163,\"uuid\":\"08e3eba2-1c6c-475d-9098-bc52b7675ad4\",\"account_no\":\"1301\",\"name\":\"Noch nicht erhaltener Ertrag\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":109,\"is_active\":true,\"is_locked\":false},{\"id\":164,\"uuid\":\"23f59bc4-1d4c-4592-8373-597718ab0ef1\",\"account_no\":\"1400\",\"name\":\"Wertschriften\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":100,\"is_active\":true,\"is_locked\":false},{\"id\":165,\"uuid\":\"d0875d15-3c8a-4a15-93a1-9cd809cc3d90\",\"account_no\":\"1409\",\"name\":\"Wertberichtigungen Wertschriften\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":100,\"is_active\":true,\"is_locked\":false},{\"id\":166,\"uuid\":\"34a3f728-e329-4815-a4f3-527f8d3e546f\",\"account_no\":\"1440\",\"name\":\"Darlehen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":100,\"is_active\":true,\"is_locked\":false},{\"id\":167,\"uuid\":\"c736fc65-7c29-4c8a-adc5-527f839dbe67\",\"account_no\":\"1450\",\"name\":\"Darlehen gegen\\u00fcber Beteiligung\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":100,\"is_active\":true,\"is_locked\":false},{\"id\":168,\"uuid\":\"ee46b135-df42-4b60-8b1c-ec5de56aec99\",\"account_no\":\"1500\",\"name\":\"Maschinen und Apparate\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":169,\"uuid\":\"e62ece53-dd22-435f-ba41-1e0ebc499612\",\"account_no\":\"1509\",\"name\":\"Wertberichtigung Maschinen, Apparate\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":170,\"uuid\":\"4298af69-b1ab-4b5e-abb2-b57229556d6b\",\"account_no\":\"1510\",\"name\":\"Mobiliar und Einrichtungen\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":171,\"uuid\":\"f1ec6ab5-127e-4e00-9b92-78f2ba08cf79\",\"account_no\":\"1519\",\"name\":\"Wertberichtigung Mobiliar\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":172,\"uuid\":\"b479ab78-8143-45b9-8c04-137fc0562805\",\"account_no\":\"1520\",\"name\":\"Informatik\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":173,\"uuid\":\"e5b25ad4-37a5-46d9-9dce-326212f1bb4d\",\"account_no\":\"1529\",\"name\":\"Wertberichtigung Informatik\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":174,\"uuid\":\"8ed33873-43be-403c-a862-be208bcb1b4e\",\"account_no\":\"1530\",\"name\":\"Fahrzeuge\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":175,\"uuid\":\"336b0fb1-fe65-4596-966a-25112e0a1716\",\"account_no\":\"1539\",\"name\":\"Wertberichtigung Fahrzeuge\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":176,\"uuid\":\"d465d3a1-9e2f-40fc-a783-b665fde71d8b\",\"account_no\":\"1540\",\"name\":\"Werkzeuge und Ger\\u00e4te\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":177,\"uuid\":\"7639c781-785e-4c72-9c61-1999c6e8177d\",\"account_no\":\"1549\",\"name\":\"Wertberichtigung Werkzeuge und Ger\\u00e4te\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":178,\"uuid\":\"59ee30ec-5176-494e-8248-e68c0c0d3611\",\"account_no\":\"1550\",\"name\":\"Lagereinrichtungen\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":179,\"uuid\":\"67db1c9c-cb5e-4e98-880c-8ee1545bd248\",\"account_no\":\"1559\",\"name\":\"Werberichtigung Lagereinrichtungen\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":101,\"is_active\":true,\"is_locked\":false},{\"id\":180,\"uuid\":\"79a732df-e708-45c6-9aaf-5f7e99f9ad9c\",\"account_no\":\"1600\",\"name\":\"Gesch\\u00e4ftsliegenschaften\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":102,\"is_active\":true,\"is_locked\":false},{\"id\":181,\"uuid\":\"db9c371f-7261-4316-80cb-3e60ac08211c\",\"account_no\":\"1609\",\"name\":\"Wertberichtigung Liegenschaften\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":102,\"is_active\":true,\"is_locked\":false},{\"id\":182,\"uuid\":\"ec8928df-c32a-495a-8020-2022f1ae833d\",\"account_no\":\"1700\",\"name\":\"Patente\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":183,\"uuid\":\"89313f1e-c8f8-42ad-adbd-a0fd2f0ec3f1\",\"account_no\":\"1709\",\"name\":\"Wertberichtigung Patente\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":184,\"uuid\":\"3830781d-e5cb-43fd-a68d-ccdbc0ab635f\",\"account_no\":\"1740\",\"name\":\"Software\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":185,\"uuid\":\"efefb666-b04c-4141-a471-5d01947af59e\",\"account_no\":\"1749\",\"name\":\"Wertberichtigung Software\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":186,\"uuid\":\"6ff40eca-8cbf-4ac7-858a-89e5a7ecf809\",\"account_no\":\"1790\",\"name\":\"\\u00dcbrige immaterielle Werte\",\"account_type\":3,\"tax_id\":24,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":187,\"uuid\":\"a8f8fd00-8e9c-4521-9a34-c0842525e266\",\"account_no\":\"1799\",\"name\":\"Wertberichtigung \\u00fcbr. immaterielle Werte\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":103,\"is_active\":true,\"is_locked\":false},{\"id\":188,\"uuid\":\"14f4865e-5328-4ff6-85f2-a4ba13c5107f\",\"account_no\":\"1850\",\"name\":\"Nicht einbezahltes Kapital\",\"account_type\":3,\"tax_id\":null,\"fibu_account_group_id\":104,\"is_active\":true,\"is_locked\":false},{\"id\":189,\"uuid\":\"01a64ac5-d617-4c38-9b76-1898c3f1be99\",\"account_no\":\"2100\",\"name\":\"Kontokorrent Inhaber A\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":110,\"is_active\":true,\"is_locked\":false},{\"id\":190,\"uuid\":\"6d0d1783-765b-4ac3-b6bb-c8887c08794f\",\"account_no\":\"2190\",\"name\":\"Kreditkarte\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":110,\"is_active\":true,\"is_locked\":false},{\"id\":191,\"uuid\":\"d2214844-d1bf-4441-be38-bfad33d09207\",\"account_no\":\"2206\",\"name\":\"Verrechnungssteuer\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":76,\"is_active\":true,\"is_locked\":false},{\"id\":192,\"uuid\":\"081527ea-0ced-4c01-a9db-0aa534d0309d\",\"account_no\":\"2270\",\"name\":\"Kontokorrent Vorsorgeeinrichtung\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":193,\"uuid\":\"d01862c2-ebc8-4bb4-be49-646690fafb59\",\"account_no\":\"2271\",\"name\":\"Kontokorrent AHV, IV, EO, ALV\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":194,\"uuid\":\"46c43761-f50f-4c03-b95b-d33a8652ae6f\",\"account_no\":\"2272\",\"name\":\"Kontokorrent FAK\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":195,\"uuid\":\"5c1eeb00-5a06-4f27-9922-66dd0fc13981\",\"account_no\":\"2273\",\"name\":\"Kontokorrent Unfallversicherung\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":196,\"uuid\":\"e634025c-b099-4e5f-9821-60459a192ba8\",\"account_no\":\"2274\",\"name\":\"Kontokorrent Krankentaggeld\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":197,\"uuid\":\"ea6e48da-14c3-4176-9827-d1b149ef19ce\",\"account_no\":\"2279\",\"name\":\"Kontokorrent Quellensteuer\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":111,\"is_active\":true,\"is_locked\":false},{\"id\":198,\"uuid\":\"f58278ce-e43e-41b4-b8b5-f90c062e7d3f\",\"account_no\":\"2300\",\"name\":\"Passive Rechnungsabgrenzungen\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":112,\"is_active\":true,\"is_locked\":false},{\"id\":199,\"uuid\":\"ba170d9f-eb67-48ef-b1c2-0a8a5587fe0a\",\"account_no\":\"2301\",\"name\":\"Erhaltener Ertrag des Folgejahrs\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":112,\"is_active\":true,\"is_locked\":false},{\"id\":200,\"uuid\":\"c6eb3fd8-a7e6-4ef3-b737-4e94001f9e85\",\"account_no\":\"2330\",\"name\":\"R\\u00fcckstellungen Garantie\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":112,\"is_active\":true,\"is_locked\":false},{\"id\":201,\"uuid\":\"fcbb052f-bb4a-4915-89a1-d40d63393508\",\"account_no\":\"2340\",\"name\":\"R\\u00fcckstellungen Steuern\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":112,\"is_active\":true,\"is_locked\":false},{\"id\":202,\"uuid\":\"57a9f8cb-7c14-4276-ab10-18abee3cb524\",\"account_no\":\"2370\",\"name\":\"R\\u00fcckstellungen Vorsorgeeinrichtungen\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":112,\"is_active\":true,\"is_locked\":false},{\"id\":203,\"uuid\":\"9402f18c-4b41-4796-930d-a7af59268b10\",\"account_no\":\"2400\",\"name\":\"Darlehen\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":114,\"is_active\":true,\"is_locked\":false},{\"id\":204,\"uuid\":\"c7c8fdad-e78f-41ba-b93f-d86cbe06b953\",\"account_no\":\"2500\",\"name\":\"Verbindlichkeiten gegen\\u00fcber Dritten\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":115,\"is_active\":true,\"is_locked\":false},{\"id\":205,\"uuid\":\"3f9b1491-7bad-42f1-8d82-717110fc2814\",\"account_no\":\"2550\",\"name\":\"Verbindlichkeiten gegen\\u00fcber Beteiligung\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":115,\"is_active\":true,\"is_locked\":false},{\"id\":206,\"uuid\":\"20afb119-cf3d-4738-9539-fe1e10bc217d\",\"account_no\":\"2560\",\"name\":\"Verbindlichkeiten Aktion\\u00e4r \\\/ Gesellschafter\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":116,\"is_active\":true,\"is_locked\":false},{\"id\":207,\"uuid\":\"dd54f841-a744-494f-b35b-20cb0fa71f41\",\"account_no\":\"2630\",\"name\":\"R\\u00fcckstellungen Garantie\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":208,\"uuid\":\"1718287b-b332-4468-bbe0-82c33f974d0a\",\"account_no\":\"2651\",\"name\":\"R\\u00fcckstellungen Sanierung Sachanlagen\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":209,\"uuid\":\"67b6da0e-11fe-43f7-a7d8-32828cff2a5d\",\"account_no\":\"2652\",\"name\":\"R\\u00fcckstellungen Forschung\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":210,\"uuid\":\"3782f674-0246-4332-a948-917af1f67667\",\"account_no\":\"2653\",\"name\":\"R\\u00fcckstellungen Entwicklung\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":117,\"is_active\":true,\"is_locked\":false},{\"id\":211,\"uuid\":\"fc74d618-e3d5-4b90-84e9-776fec439c60\",\"account_no\":\"2800\",\"name\":\"Kapital\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":119,\"is_active\":true,\"is_locked\":false},{\"id\":212,\"uuid\":\"b5f625c3-d92e-431f-9527-712fd8e0dcc7\",\"account_no\":\"2900\",\"name\":\"Aufgeld (Agio) bei Gr\\u00fcndung oder Kapitalerh\\u00f6hung\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":120,\"is_active\":true,\"is_locked\":false},{\"id\":213,\"uuid\":\"8b187686-bf96-40f8-85ba-2d79e60b0750\",\"account_no\":\"2950\",\"name\":\"Gesetzliche Gewinnreserve\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":120,\"is_active\":true,\"is_locked\":false},{\"id\":214,\"uuid\":\"429a9463-a8cf-4467-8457-3b6beac64860\",\"account_no\":\"2961\",\"name\":\"Beschlussm\\u00e4ssige Gewinnreserven\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":120,\"is_active\":true,\"is_locked\":false},{\"id\":215,\"uuid\":\"52638747-0335-464e-a18d-afab3f9839ba\",\"account_no\":\"2970\",\"name\":\"Gewinnvortrag oder Verlustvortrag\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":120,\"is_active\":true,\"is_locked\":false},{\"id\":216,\"uuid\":\"c9557666-c43e-4ad5-82c9-4f9c86c2c1c7\",\"account_no\":\"2979\",\"name\":\"Jahresgewinn oder Jahresverlust\",\"account_type\":4,\"tax_id\":null,\"fibu_account_group_id\":120,\"is_active\":true,\"is_locked\":false},{\"id\":217,\"uuid\":\"caaeb7f0-232a-47e1-86a2-3e04fd03c2ec\",\"account_no\":\"3000\",\"name\":\"Bruttoerl\\u00f6s Erzeugnis\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":122,\"is_active\":true,\"is_locked\":false},{\"id\":218,\"uuid\":\"8d2450d4-8cd1-4d51-a6fa-28fd7c4da2e8\",\"account_no\":\"3208\",\"name\":\"Bestands\\u00e4nderungen Forderungen\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":82,\"is_active\":true,\"is_locked\":false},{\"id\":219,\"uuid\":\"5986aa37-078a-40f3-bc10-ae4a5ee32b1b\",\"account_no\":\"3400\",\"name\":\"Dienstleistungserl\\u00f6s\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":124,\"is_active\":true,\"is_locked\":false},{\"id\":220,\"uuid\":\"a67f8009-7990-4550-979a-14876bfdc5c0\",\"account_no\":\"3408\",\"name\":\"Bestands\\u00e4nderungen Forderungen\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":124,\"is_active\":true,\"is_locked\":false},{\"id\":221,\"uuid\":\"857c5c88-4f5c-4561-bbe5-b6342205891e\",\"account_no\":\"3600\",\"name\":\"Nebenerl\\u00f6s Lieferungen und Leistungen\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":126,\"is_active\":true,\"is_locked\":false},{\"id\":222,\"uuid\":\"19b17fdd-aa31-42be-b18a-b196ab3263fb\",\"account_no\":\"3680\",\"name\":\"Sonstige Erl\\u00f6se\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":127,\"is_active\":true,\"is_locked\":false},{\"id\":223,\"uuid\":\"2c40474b-3893-46d1-9b13-e9ea79354a7e\",\"account_no\":\"3710\",\"name\":\"Eigenverbrauch Erzeugnis A\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":129,\"is_active\":true,\"is_locked\":false},{\"id\":224,\"uuid\":\"852bc18f-b8be-4770-b9d2-f755e0e07b1a\",\"account_no\":\"3720\",\"name\":\"Eigenverbrauch von Handelsware A\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":130,\"is_active\":true,\"is_locked\":false},{\"id\":225,\"uuid\":\"16a958ac-1f88-4c55-99cc-774e16a388f9\",\"account_no\":\"3740\",\"name\":\"Eigenverbrauch Dienstleistung A\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":131,\"is_active\":true,\"is_locked\":false},{\"id\":226,\"uuid\":\"9b03f196-6d1a-46f7-94e6-73909c654d88\",\"account_no\":\"3790\",\"name\":\"Naturalbez\\u00fcge\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":132,\"is_active\":true,\"is_locked\":false},{\"id\":227,\"uuid\":\"5bc39f69-5a6b-412f-aaa3-6af905ce5317\",\"account_no\":\"3801\",\"name\":\"Rabatte und Preisnachl\\u00e4sse\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":228,\"uuid\":\"c4006e79-9b94-4bd6-9a16-d3b188613659\",\"account_no\":\"3802\",\"name\":\"R\\u00fcckverg\\u00fctungen\",\"account_type\":1,\"tax_id\":14,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":229,\"uuid\":\"655a8f2b-b3f9-45dc-ba06-1968ede23704\",\"account_no\":\"3803\",\"name\":\"Provision an Dritte\",\"account_type\":1,\"tax_id\":21,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":230,\"uuid\":\"8530bf05-2955-4096-9cb6-1c73ed93dd85\",\"account_no\":\"3804\",\"name\":\"Inkassospesen\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":231,\"uuid\":\"05390059-6b01-4bfb-96e3-a212e48fdb2a\",\"account_no\":\"3805\",\"name\":\"Verluste \\\/ Wertberichtigung Forderungen\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":232,\"uuid\":\"1c752874-83e6-4dcc-ae8e-7f6edc267a93\",\"account_no\":\"3806\",\"name\":\"Kursdifferenzen\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":80,\"is_active\":true,\"is_locked\":false},{\"id\":233,\"uuid\":\"9faa543d-1044-433e-976a-1c11bee7c9dd\",\"account_no\":\"3900\",\"name\":\"Bestandes\\u00e4nderungen unfertige Erzeugnisse\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":133,\"is_active\":true,\"is_locked\":false},{\"id\":234,\"uuid\":\"16a0d285-d1c3-458a-a339-e6771ed54026\",\"account_no\":\"3901\",\"name\":\"Bestandes\\u00e4nderungen fertige Erzeugnisse\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":133,\"is_active\":true,\"is_locked\":false},{\"id\":235,\"uuid\":\"213cbe0d-b6a2-4c13-96e8-c72a1b77a01f\",\"account_no\":\"3940\",\"name\":\"Bestands\\u00e4nderungen nicht fakturierte Dienstleistungen\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":134,\"is_active\":true,\"is_locked\":false},{\"id\":236,\"uuid\":\"1c1f72e4-cb89-40bf-850d-3c994debdc22\",\"account_no\":\"4000\",\"name\":\"Materialeinkauf Erzeugnis\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":135,\"is_active\":true,\"is_locked\":false},{\"id\":237,\"uuid\":\"2863bd5d-634d-45b9-93bc-4a8d82f6fcdf\",\"account_no\":\"4001\",\"name\":\"Einkauf von Bestandteilen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":238,\"uuid\":\"14f3f08a-904c-4069-b8f0-091aa74c11f3\",\"account_no\":\"4002\",\"name\":\"Einkauf von Zubeh\\u00f6rteilen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":239,\"uuid\":\"ca3e74b0-b12c-4774-995f-11cb3388c9a3\",\"account_no\":\"4004\",\"name\":\"Einkauf von Hilfs- und Verbrauchsmaterial\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":240,\"uuid\":\"8e2753f8-0de0-4002-b338-d41f73312010\",\"account_no\":\"4005\",\"name\":\"Einkauf von Verpackungsmaterial\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":241,\"uuid\":\"d3473f48-1b9a-472f-97ee-78c13df33c97\",\"account_no\":\"4006\",\"name\":\"Fremdleistungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":242,\"uuid\":\"1869aa45-24d3-4e6c-a371-4ff21cf025a8\",\"account_no\":\"4007\",\"name\":\"Direkte Einkaufsspesen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":243,\"uuid\":\"a7275c7b-e6b8-4d0c-bf1d-39e73c8600db\",\"account_no\":\"4008\",\"name\":\"Bestandes\\u00e4nderungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":136,\"is_active\":true,\"is_locked\":false},{\"id\":244,\"uuid\":\"c5b78647-59f7-4deb-a480-db04d8773d16\",\"account_no\":\"4070\",\"name\":\"Eingangsfracht\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":137,\"is_active\":true,\"is_locked\":false},{\"id\":245,\"uuid\":\"186eafa0-054a-447e-ab45-e77790fbdac9\",\"account_no\":\"4071\",\"name\":\"Einfuhrz\\u00f6lle\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":137,\"is_active\":true,\"is_locked\":false},{\"id\":246,\"uuid\":\"6b89bc9d-cdd4-4fdf-a838-a87602baee99\",\"account_no\":\"4205\",\"name\":\"Einkauf und Verpackungsmaterial\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":87,\"is_active\":true,\"is_locked\":false},{\"id\":247,\"uuid\":\"8d0326a6-f177-442e-9cd4-d6f54c9addcb\",\"account_no\":\"4207\",\"name\":\"Direkte Einkaufsspesen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":87,\"is_active\":true,\"is_locked\":false},{\"id\":248,\"uuid\":\"ca5c1b1a-77d8-4458-9f68-3d10367127a6\",\"account_no\":\"4208\",\"name\":\"Bestandes\\u00e4nderungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":87,\"is_active\":true,\"is_locked\":false},{\"id\":249,\"uuid\":\"54468272-67d3-4ede-97de-c7ef95903573\",\"account_no\":\"4270\",\"name\":\"Eingangsfrachten\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":138,\"is_active\":true,\"is_locked\":false},{\"id\":250,\"uuid\":\"c7d0c507-2682-4d52-8f54-024739bb8dd0\",\"account_no\":\"4271\",\"name\":\"Einfuhrz\\u00f6lle\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":138,\"is_active\":true,\"is_locked\":false},{\"id\":251,\"uuid\":\"a2fa0618-af2d-463e-ab66-b33ced34a8da\",\"account_no\":\"4400\",\"name\":\"Einkauf Dienstleistungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":140,\"is_active\":true,\"is_locked\":false},{\"id\":252,\"uuid\":\"2f58d7f2-e817-435d-b0dc-0d242a8327d6\",\"account_no\":\"4407\",\"name\":\"Direkte Einkaufsspesen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":140,\"is_active\":true,\"is_locked\":false},{\"id\":253,\"uuid\":\"5604fef8-18f8-42a2-9dc4-d361b22c0a5c\",\"account_no\":\"4409\",\"name\":\"Einkaufspreisminderungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":140,\"is_active\":true,\"is_locked\":false},{\"id\":254,\"uuid\":\"14f71edd-2da8-48cb-b5d4-bd362b6c7200\",\"account_no\":\"4600\",\"name\":\"\\u00dcbriger Materialaufwand Produktion\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":142,\"is_active\":true,\"is_locked\":false},{\"id\":255,\"uuid\":\"c18f6ca3-1799-4736-bcba-836f587ac608\",\"account_no\":\"4620\",\"name\":\"\\u00dcbriger Handelswarenaufwand\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":143,\"is_active\":true,\"is_locked\":false},{\"id\":256,\"uuid\":\"c445875b-fbc2-40cc-a80d-1dc6f987a8ef\",\"account_no\":\"4640\",\"name\":\"\\u00dcbriger Aufwand f\\u00fcr Dienstleistungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":144,\"is_active\":true,\"is_locked\":false},{\"id\":257,\"uuid\":\"5026b545-723f-493f-9eee-dc6819f0736a\",\"account_no\":\"4650\",\"name\":\"Aufwand f\\u00fcr Verpackungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":145,\"is_active\":true,\"is_locked\":false},{\"id\":258,\"uuid\":\"7c28e34a-ae3c-428a-9e5f-11f7d1152887\",\"account_no\":\"4660\",\"name\":\"Ver\\u00e4nderung der Garantier\\u00fcckstellungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":146,\"is_active\":true,\"is_locked\":false},{\"id\":259,\"uuid\":\"fad70df7-4e4d-43cc-883e-a94b164d58aa\",\"account_no\":\"4700\",\"name\":\"Eingangsfrachten und Zoll\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":147,\"is_active\":true,\"is_locked\":false},{\"id\":260,\"uuid\":\"2d677928-7565-4f42-b527-63d9493a42c6\",\"account_no\":\"4800\",\"name\":\"Bestands\\u00e4nderung Handelswaren\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":149,\"is_active\":true,\"is_locked\":false},{\"id\":261,\"uuid\":\"0bae8c8c-ccaa-4967-a6d6-dbf4b7d00927\",\"account_no\":\"4901\",\"name\":\"Rabatte und Preisnachl\\u00e4sse\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":85,\"is_active\":true,\"is_locked\":false},{\"id\":262,\"uuid\":\"11fd686d-e22c-4bf1-a6c4-7ab5570cc529\",\"account_no\":\"4902\",\"name\":\"R\\u00fcckverg\\u00fctungen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":85,\"is_active\":true,\"is_locked\":false},{\"id\":263,\"uuid\":\"91f44ae5-6c31-4d15-9d74-ac3c97581b29\",\"account_no\":\"4903\",\"name\":\"Einkaufsprovisionen\",\"account_type\":2,\"tax_id\":21,\"fibu_account_group_id\":85,\"is_active\":true,\"is_locked\":false},{\"id\":264,\"uuid\":\"3c3879b3-6014-4635-bfd0-9d4d1baec9db\",\"account_no\":\"4906\",\"name\":\"Kursdifferenzen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":85,\"is_active\":true,\"is_locked\":false},{\"id\":265,\"uuid\":\"45de8e9a-f238-4328-8f47-c83141c7b959\",\"account_no\":\"5000\",\"name\":\"L\\u00f6hne\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":151,\"is_active\":true,\"is_locked\":false},{\"id\":266,\"uuid\":\"e2dbd3d5-5e9a-4a4e-b834-a7a693566a8a\",\"account_no\":\"5001\",\"name\":\"Zulagen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":151,\"is_active\":true,\"is_locked\":false},{\"id\":267,\"uuid\":\"0df945bf-95a6-4641-8bc3-e855a7c0d9d3\",\"account_no\":\"5002\",\"name\":\"Erfolgsbeteiligungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":151,\"is_active\":true,\"is_locked\":false},{\"id\":268,\"uuid\":\"f5fb56ab-182a-4399-abc1-cefabccbccb5\",\"account_no\":\"5003\",\"name\":\"Provisionen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":151,\"is_active\":true,\"is_locked\":false},{\"id\":269,\"uuid\":\"df4726b0-d85c-49cf-b24c-e8790c51067a\",\"account_no\":\"5005\",\"name\":\"Leistungen von Sozialversicherungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":151,\"is_active\":true,\"is_locked\":false},{\"id\":270,\"uuid\":\"92d08932-032c-4811-805d-50e7be1ede71\",\"account_no\":\"5008\",\"name\":\"\\u00dcbriger Personalaufwand\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":151,\"is_active\":true,\"is_locked\":false},{\"id\":271,\"uuid\":\"a2455b61-5aae-4a01-b2f0-5d33431de014\",\"account_no\":\"5700\",\"name\":\"AHV, IV, EO, ALV\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":153,\"is_active\":true,\"is_locked\":false},{\"id\":272,\"uuid\":\"693e83b8-2d94-4944-bc00-12a6ca4c7d94\",\"account_no\":\"5710\",\"name\":\"FAK\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":153,\"is_active\":true,\"is_locked\":false},{\"id\":273,\"uuid\":\"bd96f3ba-a2aa-497f-9712-978bb3f4d695\",\"account_no\":\"5720\",\"name\":\"Vorsorgeeinrichtungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":153,\"is_active\":true,\"is_locked\":false},{\"id\":274,\"uuid\":\"77f4ea38-fc00-46d9-88ec-95244fe67292\",\"account_no\":\"5730\",\"name\":\"Unfallversicherung\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":153,\"is_active\":true,\"is_locked\":false},{\"id\":275,\"uuid\":\"d0e65d59-9763-4d5f-a18e-740737c4d142\",\"account_no\":\"5740\",\"name\":\"Krankentaggeldversicherung\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":153,\"is_active\":true,\"is_locked\":false},{\"id\":276,\"uuid\":\"a46f58c4-e108-4b89-8975-d55232e6dac2\",\"account_no\":\"5790\",\"name\":\"Quellensteuer\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":153,\"is_active\":true,\"is_locked\":false},{\"id\":277,\"uuid\":\"8e8097e3-dafc-4192-9f9d-3247fd8de39f\",\"account_no\":\"5800\",\"name\":\"Personalinserate\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":155,\"is_active\":true,\"is_locked\":false},{\"id\":278,\"uuid\":\"5c9c727c-33b3-4476-8a08-22fb0b8e4f39\",\"account_no\":\"5810\",\"name\":\"Aus- und Weiterbildung\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":156,\"is_active\":true,\"is_locked\":false},{\"id\":279,\"uuid\":\"3ef42125-a130-4b57-ba9a-8618bcb5ce16\",\"account_no\":\"5820\",\"name\":\"Spesenentsch\\u00e4digung effektiv\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":157,\"is_active\":true,\"is_locked\":false},{\"id\":280,\"uuid\":\"bc02caf0-3f1b-4878-b620-e3f88c12e7cf\",\"account_no\":\"5821\",\"name\":\"Verpflegungsspesen\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":157,\"is_active\":true,\"is_locked\":false},{\"id\":281,\"uuid\":\"6e44a0b8-48f8-4d40-b79a-aade323c80ee\",\"account_no\":\"5822\",\"name\":\"\\u00dcbernachtungsspesen\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":157,\"is_active\":true,\"is_locked\":false},{\"id\":282,\"uuid\":\"12780725-cede-4eff-a81d-0ebc60276983\",\"account_no\":\"5830\",\"name\":\"Pauschalspesen Kader\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":158,\"is_active\":true,\"is_locked\":false},{\"id\":283,\"uuid\":\"3cd7361e-9d35-4f4a-9b3d-bfaccafc2f8a\",\"account_no\":\"5832\",\"name\":\"Spesen, Reise, Auto, \\u00dcbernachtung\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":158,\"is_active\":true,\"is_locked\":false},{\"id\":284,\"uuid\":\"81338049-12c4-4aa7-b4f2-e5d58ff09885\",\"account_no\":\"5880\",\"name\":\"Personalanl\\u00e4sse\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":159,\"is_active\":true,\"is_locked\":false},{\"id\":285,\"uuid\":\"fa946212-60c6-440d-9373-243c30932bf3\",\"account_no\":\"5890\",\"name\":\"Privatanteile Personalaufwand\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":160,\"is_active\":true,\"is_locked\":false},{\"id\":286,\"uuid\":\"385469cb-45ef-4ce3-a0d4-892c30e1e1e4\",\"account_no\":\"5891\",\"name\":\"Ausgleich Naturalleistungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":160,\"is_active\":true,\"is_locked\":false},{\"id\":287,\"uuid\":\"674dd2e5-653c-44ff-a10a-f3316147134b\",\"account_no\":\"5900\",\"name\":\"Leistungen Dritter\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":161,\"is_active\":true,\"is_locked\":false},{\"id\":288,\"uuid\":\"614549e9-8a4c-47ff-8ab4-e367707b2ece\",\"account_no\":\"5901\",\"name\":\"Tempor\\u00e4re Arbeitnehmer\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":161,\"is_active\":true,\"is_locked\":false},{\"id\":289,\"uuid\":\"a03efc23-db07-4c86-8dcf-134b02a316d2\",\"account_no\":\"6000\",\"name\":\"Miete\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":163,\"is_active\":true,\"is_locked\":false},{\"id\":290,\"uuid\":\"930db424-f981-43dc-a24b-94fd4fc3c2a7\",\"account_no\":\"6010\",\"name\":\"Eigenmieten Gesch\\u00e4ftslokalit\\u00e4ten\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":163,\"is_active\":true,\"is_locked\":false},{\"id\":291,\"uuid\":\"8c747472-33c9-41d6-bff9-3354dfd03335\",\"account_no\":\"6030\",\"name\":\"Nebenkosten\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":163,\"is_active\":true,\"is_locked\":false},{\"id\":292,\"uuid\":\"248f01c6-2ea7-4121-9ecb-5ee08640dd0f\",\"account_no\":\"6040\",\"name\":\"Reinigung\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":163,\"is_active\":true,\"is_locked\":false},{\"id\":293,\"uuid\":\"55d6252d-08ba-41da-8985-425078122a7f\",\"account_no\":\"6100\",\"name\":\"URE Maschinen und Einrichtungen\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":165,\"is_active\":true,\"is_locked\":false},{\"id\":294,\"uuid\":\"f5087c32-87aa-49b4-a28a-be27ee040eba\",\"account_no\":\"6200\",\"name\":\"Reparaturen\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":167,\"is_active\":true,\"is_locked\":false},{\"id\":295,\"uuid\":\"3868aa8a-3a91-4cdc-bc3c-74cac8210d25\",\"account_no\":\"6210\",\"name\":\"Betriebsstoffe\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":167,\"is_active\":true,\"is_locked\":false},{\"id\":296,\"uuid\":\"3689d3d5-cbac-44a9-b8af-8b025504b91f\",\"account_no\":\"6220\",\"name\":\"Fahrzeugversicherung und Abgaben\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":167,\"is_active\":true,\"is_locked\":false},{\"id\":297,\"uuid\":\"41c9bc91-c665-44c3-b6f0-864eaecc786b\",\"account_no\":\"6260\",\"name\":\"Fahrzeugleasing\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":167,\"is_active\":true,\"is_locked\":false},{\"id\":298,\"uuid\":\"82fed8b6-292e-4946-b748-41dbd0128061\",\"account_no\":\"6270\",\"name\":\"Privatanteile Fahrzeugaufwand\",\"account_type\":2,\"tax_id\":14,\"fibu_account_group_id\":167,\"is_active\":true,\"is_locked\":false},{\"id\":299,\"uuid\":\"8dc8c2cc-1620-45cb-b8be-6ceafcfc3971\",\"account_no\":\"6300\",\"name\":\"Sachversicherungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":169,\"is_active\":true,\"is_locked\":false},{\"id\":300,\"uuid\":\"c6b36d24-93be-4546-8797-6ef7f5397ba5\",\"account_no\":\"6360\",\"name\":\"Abgaben, Geb\\u00fchren, Bewilligungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":170,\"is_active\":true,\"is_locked\":false},{\"id\":301,\"uuid\":\"cf10e98a-0c18-4402-a159-4b38adeef707\",\"account_no\":\"6400\",\"name\":\"Energie- und Entsorgungsaufwand\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":172,\"is_active\":true,\"is_locked\":false},{\"id\":302,\"uuid\":\"3c7530b8-3f15-4aca-af06-aa11a9a76c27\",\"account_no\":\"6500\",\"name\":\"B\\u00fcromaterial\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":174,\"is_active\":true,\"is_locked\":false},{\"id\":303,\"uuid\":\"a1641666-a2b6-495a-addf-774ccb444192\",\"account_no\":\"6510\",\"name\":\"Kommunikationskosten\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":174,\"is_active\":true,\"is_locked\":false},{\"id\":304,\"uuid\":\"ee5c6dad-955f-403c-a044-ca44397bdde0\",\"account_no\":\"6512\",\"name\":\"Internet\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":174,\"is_active\":true,\"is_locked\":false},{\"id\":305,\"uuid\":\"df88f8e4-3ce8-4064-ba30-ffdba369e515\",\"account_no\":\"6513\",\"name\":\"Porti\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":174,\"is_active\":true,\"is_locked\":false},{\"id\":306,\"uuid\":\"9b56f81b-6fa5-4a1a-a7f4-55bb80e80b91\",\"account_no\":\"6530\",\"name\":\"Buchf\\u00fchrung\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":174,\"is_active\":true,\"is_locked\":false},{\"id\":307,\"uuid\":\"1728aebc-5ab1-450e-9c46-882d767f8642\",\"account_no\":\"6559\",\"name\":\"Sonstiger Verwaltungsaufwand\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":174,\"is_active\":true,\"is_locked\":false},{\"id\":308,\"uuid\":\"06606bb8-1f1b-4edb-b24a-4cf85db0830a\",\"account_no\":\"6570\",\"name\":\"Informatikaufwand\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":175,\"is_active\":true,\"is_locked\":false},{\"id\":309,\"uuid\":\"b03aa887-f87a-4448-a4b4-061c815761ee\",\"account_no\":\"6600\",\"name\":\"Werbeinserate, elektronische Medien\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":177,\"is_active\":true,\"is_locked\":false},{\"id\":310,\"uuid\":\"98b865ec-c7d1-4ca8-94e8-1d88014d4123\",\"account_no\":\"6610\",\"name\":\"Werbedrucksachen, Werbematerial\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":177,\"is_active\":true,\"is_locked\":false},{\"id\":311,\"uuid\":\"c7d2aa44-b259-4194-b12b-f9e0623b2c29\",\"account_no\":\"6640\",\"name\":\"Reisespesen\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":178,\"is_active\":true,\"is_locked\":false},{\"id\":312,\"uuid\":\"a80aaabb-144f-4c65-a478-6c6a5d4241ad\",\"account_no\":\"6641\",\"name\":\"Kundenbetreuung\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":178,\"is_active\":true,\"is_locked\":false},{\"id\":313,\"uuid\":\"474dc6bb-3082-41d7-9032-2484ddd05beb\",\"account_no\":\"6700\",\"name\":\"Wirtschaftsausk\\u00fcnfte, Betreibungen\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":179,\"is_active\":true,\"is_locked\":false},{\"id\":314,\"uuid\":\"e39478c7-3f8f-4e6b-9091-1ea6ab1943b2\",\"account_no\":\"6790\",\"name\":\"Sonstiger betrieblicher Aufwand\",\"account_type\":2,\"tax_id\":24,\"fibu_account_group_id\":179,\"is_active\":true,\"is_locked\":false},{\"id\":315,\"uuid\":\"2a5eaa02-e141-4961-a5ea-f9a21e43b385\",\"account_no\":\"6800\",\"name\":\"Abschreibung \\\/ WB Anlageverm\\u00f6gen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":180,\"is_active\":true,\"is_locked\":false},{\"id\":316,\"uuid\":\"dc72c3d0-d6f9-41d2-9bd3-dff6e2622324\",\"account_no\":\"6820\",\"name\":\"Abschreibungen \\\/ WB Maschinen, Apparate\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":181,\"is_active\":true,\"is_locked\":false},{\"id\":317,\"uuid\":\"db767978-9d85-48d4-9c94-2ee16ca8bb4e\",\"account_no\":\"6900\",\"name\":\"Zinsaufwand\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":93,\"is_active\":true,\"is_locked\":false},{\"id\":318,\"uuid\":\"2244c324-bd40-4503-b519-009b1908056d\",\"account_no\":\"6940\",\"name\":\"Bankspesen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":93,\"is_active\":true,\"is_locked\":false},{\"id\":319,\"uuid\":\"bcfcf97c-9db8-4df6-8232-447baa4c7140\",\"account_no\":\"6950\",\"name\":\"Ertr\\u00e4ge aus Bankguthaben\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":92,\"is_active\":true,\"is_locked\":false},{\"id\":320,\"uuid\":\"eb870219-2b6d-420d-8048-2e92dd4b75f7\",\"account_no\":\"8000\",\"name\":\"Betriebsfremder a.o. Aufwand\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":95,\"is_active\":true,\"is_locked\":false},{\"id\":321,\"uuid\":\"50c17444-2168-4b99-93e7-8be3e1d6fe2c\",\"account_no\":\"8100\",\"name\":\"Betriebsfremder a.o. Ertrag\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":95,\"is_active\":true,\"is_locked\":false},{\"id\":322,\"uuid\":\"0922c1e5-f2e4-4d71-9fc2-502475dafc1a\",\"account_no\":\"8505\",\"name\":\"A.o. Verluste von Forderungen\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":96,\"is_active\":true,\"is_locked\":false},{\"id\":323,\"uuid\":\"eacd9d0a-c2cf-4b1b-b067-7200600feb83\",\"account_no\":\"8514\",\"name\":\"A.o. Gewinne Ver\\u00e4usserung Anlageverm\\u00f6gen\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":96,\"is_active\":true,\"is_locked\":false},{\"id\":324,\"uuid\":\"392fb790-6cea-43f2-a318-c00dc48c4b1b\",\"account_no\":\"8700\",\"name\":\"Periodenfremder Aufwand\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":96,\"is_active\":true,\"is_locked\":false},{\"id\":325,\"uuid\":\"fbc6f856-d14f-4a9c-9d1b-5a305b0e0a07\",\"account_no\":\"8710\",\"name\":\"Periodenfremder Ertrag\",\"account_type\":1,\"tax_id\":null,\"fibu_account_group_id\":96,\"is_active\":true,\"is_locked\":false},{\"id\":326,\"uuid\":\"407c9e64-343a-4294-bde3-5d255ce85338\",\"account_no\":\"8900\",\"name\":\"Direkte Steuern\",\"account_type\":2,\"tax_id\":null,\"fibu_account_group_id\":182,\"is_active\":true,\"is_locked\":false}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Accounts/search-accounts.json b/tests/Fixtures/Saloon/Accounts/search-accounts.json
index 088e458..5ed60a6 100644
--- a/tests/Fixtures/Saloon/Accounts/search-accounts.json
+++ b/tests/Fixtures/Saloon/Accounts/search-accounts.json
@@ -1 +1,24 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:34 GMT","Content-Type":"application\/json","Content-Length":"2","Connection":"keep-alive","x-ratelimit-remaining-minute":"998","ratelimit-limit":"1000","ratelimit-remaining":"998","ratelimit-reset":"26","x-ratelimit-limit-minute":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c7892f977198-LHR"},"data":"[]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:37:09 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "191",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a50fd14282901df-ZRH",
+ "ratelimit-reset": "51",
+ "x-ratelimit-remaining-minute": "998",
+ "x-ratelimit-limit-minute": "1000",
+ "ratelimit-remaining": "998",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":117,\"uuid\":\"381eebf4-c508-4c30-a44c-22f269514034\",\"account_no\":\"9900\",\"name\":\"Korrekturen\",\"account_type\":5,\"tax_id\":null,\"fibu_account_group_id\":98,\"is_active\":true,\"is_locked\":true}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/BankAccounts/fetch-a-list-of-bank-accounts.json b/tests/Fixtures/Saloon/BankAccounts/fetch-a-list-of-bank-accounts.json
index 61fb352..24b7b4b 100644
--- a/tests/Fixtures/Saloon/BankAccounts/fetch-a-list-of-bank-accounts.json
+++ b/tests/Fixtures/Saloon/BankAccounts/fetch-a-list-of-bank-accounts.json
@@ -1,14 +1,15 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 20:43:24 GMT",
+ "Date": "Thu, 27 Nov 2025 10:40:48 GMT",
"Content-Type": "application\/json",
- "Content-Length": "138",
+ "Content-Length": "638",
"Connection": "keep-alive",
- "ratelimit-reset": "36",
- "x-ratelimit-remaining-minute": "999",
+ "CF-RAY": "9a51026f0aefa625-ZRH",
+ "x-ratelimit-remaining-minute": "998",
"x-ratelimit-limit-minute": "1000",
- "ratelimit-remaining": "999",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "12",
"ratelimit-limit": "1000",
"x-total-count": "1",
"x-limit": "500",
@@ -18,9 +19,9 @@
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb70b84df5f779b-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "[{\"id\":1,\"uuid\":\"8bc53d7d-953d-11ea-8073-42010a7c00c5\",\"name\":\"Example Bank\",\"currency_id\":1,\"account_id\":115,\"remarks\":\"\",\"type\":\"cash\"}]"
+ "data": "[{\"id\":1,\"uuid\":\"8bc53d7d-953d-11ea-8073-42010a7c00c5\",\"name\":\"Musterbank\",\"owner\":\"Muster Hans\",\"owner_address\":\"Maxstrasse\",\"owner_house_number\":\"21\",\"owner_zip\":\"4023\",\"owner_city\":\"Basel\",\"owner_country_code\":\"CH\",\"bc_nr\":\"04835\",\"bank_name\":\"UBS Switzerland AG (formerly Credit Suisse)\",\"bank_account_nr\":\"12345678009\",\"iban_nr\":\"CH5604835012345678009\",\"currency_id\":1,\"account_id\":142,\"remarks\":null,\"is_esr\":false,\"esr_besr_id\":\"\",\"esr_bottom_line_include_amount\":true,\"esr_post_account_nr\":\"\",\"esr_payment_for_text\":\"\",\"esr_in_favour_of_text\":\"\",\"invoice_mode\":\"none\",\"qr_invoice_iban\":null,\"type\":\"bank\",\"bank_nr\":\"CRESCHZZ80A\"}]",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/BankAccounts/fetch-a-single-bank-account.json b/tests/Fixtures/Saloon/BankAccounts/fetch-a-single-bank-account.json
index 0754fc9..d3a50ab 100644
--- a/tests/Fixtures/Saloon/BankAccounts/fetch-a-single-bank-account.json
+++ b/tests/Fixtures/Saloon/BankAccounts/fetch-a-single-bank-account.json
@@ -1,24 +1,25 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 20:43:24 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:28 GMT",
"Content-Type": "application\/json",
- "Content-Length": "136",
+ "Content-Length": "636",
"Connection": "keep-alive",
- "x-ratelimit-remaining-minute": "998",
- "x-ratelimit-limit-minute": "1000",
- "ratelimit-remaining": "998",
+ "CF-RAY": "9a5107ce0b95a032-ZRH",
+ "x-ratelimit-remaining-minute": "978",
"ratelimit-limit": "1000",
- "ratelimit-reset": "36",
- "etag": "02e58b70b38547db432d3556a1ed14bb",
+ "ratelimit-remaining": "978",
+ "ratelimit-reset": "32",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "7fbf51a1aeed8dd8ba937a9fbed6ba08",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb70b879a07944e-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "{\"id\":1,\"uuid\":\"8bc53d7d-953d-11ea-8073-42010a7c00c5\",\"name\":\"Example Bank\",\"currency_id\":1,\"account_id\":115,\"remarks\":\"\",\"type\":\"cash\"}"
+ "data": "{\"id\":1,\"uuid\":\"8bc53d7d-953d-11ea-8073-42010a7c00c5\",\"name\":\"Musterbank\",\"owner\":\"Muster Hans\",\"owner_address\":\"Maxstrasse\",\"owner_house_number\":\"21\",\"owner_zip\":\"4023\",\"owner_city\":\"Basel\",\"owner_country_code\":\"CH\",\"bc_nr\":\"04835\",\"bank_name\":\"UBS Switzerland AG (formerly Credit Suisse)\",\"bank_account_nr\":\"12345678009\",\"iban_nr\":\"CH5604835012345678009\",\"currency_id\":1,\"account_id\":142,\"remarks\":null,\"is_esr\":false,\"esr_besr_id\":\"\",\"esr_bottom_line_include_amount\":true,\"esr_post_account_nr\":\"\",\"esr_payment_for_text\":\"\",\"esr_in_favour_of_text\":\"\",\"invoice_mode\":\"none\",\"qr_invoice_iban\":null,\"type\":\"bank\",\"bank_nr\":\"CRESCHZZ80A\"}",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/create-contact.json b/tests/Fixtures/Saloon/Contacts/create-contact.json
index 509dda2..637e467 100644
--- a/tests/Fixtures/Saloon/Contacts/create-contact.json
+++ b/tests/Fixtures/Saloon/Contacts/create-contact.json
@@ -1 +1,25 @@
-{"statusCode":201,"headers":{"Date":"Tue, 02 Jan 2024 11:49:15 GMT","Content-Type":"application\/json","Content-Length":"4304","Connection":"keep-alive","x-ratelimit-remaining-minute":"995","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"995","ratelimit-limit":"1000","ratelimit-reset":"45","etag":"bb727c1b45f71280b8bd667bfafd4235","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c712fb5076ab-LHR"},"data":"{\"id\":2,\"nr\":\"000002\",\"contact_type_id\":1,\"name_1\":\"John\",\"name_2\":\"\",\"salutation_id\":null,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"\",\"postcode\":\"\",\"city\":\"\",\"country_id\":null,\"mail\":\"\",\"mail_second\":\"\",\"phone_fixed\":\"\",\"phone_fixed_second\":\"\",\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":null,\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"profile_image\":\"iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKq0lEQVR4nNVcbWwUxxl+znYNGLChlq22MbExHArQYivFmC8V4j+NjKsmbaOqrcRJaaISJ6qEFVS1UDi3\\\/EhD5UgtH+mPNLbUNhVNm0ayL7EiHFPxfU5qU2KEr3ZNoSX4BPGdD8PZ55v+IHPsze7OvLO7XPEjWfLuzs3MPffsfLwfg0Pto8wrnOsf96yu+wUv+3iofZRhSd0xdic540mF27aHPannfsKrPt5JzrAldcdY3tVrd\\\/DaG1fgFuGBGEI9Y67rud8I9YwhPBBzXc9rb1zB1Wt3kAcALx0aRnIq7arC1raI607lCm77mpxK46VDwwBwl0C3Kpwt6uNwq0KuPuBTAgF3KtT5RcMDMTQF+lDfdNIT0kM9Y6hvOommQJ8WKU5VaFQfYCDQqQqp6hOJc0ukSJwukU5VaFQfAPh8FV2MX1R8fi4iJ7ZiTmGe5Yet0BToyyIgfaUx63l4IIbWtoiSpLqaEuxr8aOxoVxaLtQzhta2iPLLNzaUY1+LH3U1JVn385aEssp0dqyV1mNEcioN\\\/+beLAKzmNJVoUx9ugpTlXeiMFV5XRWK6gMEBQJ6KhTVBwBnOzeRFKcCVyQAkuJU4Iqsbzppuk9RoZX6AKBALBhPpJBMpkkERm8kTfcGhyZwaSSh\\\/KwKo1dvY3AokfnfLS6NJDA4NGG6b\\\/UdrJBMphFPpEz3TSztfHYpiheaeLUEV4gRgacqcLF3C15vW4NlVUWkeowoKy3Ey7sfwcjpx\\\/Dijmq8uKMaI6cfw8u7H0FZaaF2fcuqivB62xpc7N2CwFMVpO9gheKFBdj57FLT\\\/axXuHhhAf59toFMIADUN53Mer2Mk0hqhuH3f\\\/kP9v\\\/qnxgenZTWU1ZaiF07qvFcoBLz5+Vblrl1ewZHOi7jwKsjiN6Ykta3rKoIe364HN\\\/7xkMoyPdl7hsnkbqaEpzt3CStx4j4RAoP1\\\/cgPnFPiVkK1FEfh+wXLMj3KRUpKs6OPACYPy9fqUhRcUbydPpuBUsV+iq6mK+ii5Ws7Gax+LSjjfW6bScYr0eG6VSatR+9wpZvfp+V17zHDhwZZonJlKM2GWMsMZliB44Ms\\\/Ka99jyze+z9qNX2HQqLf0M7+e6bScctRmLT7OSld2ZejIEBtuGHFXIGGNdx66TCOSYTqVdESciMZlSEsfB+9l17Lrj9oJtQ5l68jLSfMY8QFLR2FBuWrDKUJDvk76qupg\\\/L1\\\/6qoqoqylRLthl2PnMvaEuD3A29onQHU\\\/+n3Db16yx0M3YJ8LpuJJLeNVHPhbm\\\/\\\/gne4Nf3VLmwe8KPPS5ufAvne9JXfcLXvVxzpw8JKfS8DHGmLo4HcZ1lh2aA5VY5V+AF\\\/Z85EmbB\\\/evxmAkgcMdl5VlRWOHW7gb+BygOVCJg\\\/tXZ67dknhw\\\/2o0Byoz1xQSvQTdbuUBRPLEa12I5InXuUDOCLQjyymJdmTlmsScEKgiSZdEFUm5JFFJoFvTuxU53cejprGKSqIVOYc7LqP7eFRZjgJtH4vdOudc\\\/zjbtj2c2bIY95CybZCx7PO7L5iev9s7xuZWv8N8FV3MKiriUPuoqU3+Jys\\\/t\\\/od9m7vmOn587svZNVhh65j17P29Pxv2\\\/awNJrBtIxx68Pgyxg75T3x9AdZ3j87RYmzM6XcnMI8\\\/PW3X4a4rn1hz0cZxYvLGLc+lgyBVOJEiETmLQmRyeNQkUMlGVCTyAmkEidCJNJ3rn+ceenDCPVEtcjjsCMJAJk8DhmJjQ1lnvpYCrz2YazyLzA9Gx6dVDrtByPmPti5BKzKGpGcSt+1gG\\\/Jvr\\\/KvwCDQwlPfSz5bx1tCzYHKlH9cBEuXJrAJ+PTWhWVlRYi2OLH735di60bSlH\\\/tVMoKy1EXe2iTJm62kUoKy1EqCdqWYfslf\\\/j29dQV1uC5VX39q+NDeWI3pyyVZHsle\\\/+wzo0ByqxuPgz6B+MY\\\/L2jNb3XVZVhLa9K\\\/GbX3wJj36xJHsv7IUPg08i1HGLMl5SJgcOVbvGScQLH4vlMsZoehendZUpnrrsoCxzjH+UZQplWWQFo2tAbFflKpBaY4yKjE+klF4zwGyNsVPEYCShPdnIlLjKv4CkeJk1xqjI4oUF1ooTQDJnpWYYklNpkhneypxF2RVQZmrAnkQRdjM1xZx16\\\/YM5hTmkdwEpL2wWx+G1VhlBJU84O4M+8TTH5i2bkaoljkq6PhYcmaNsSNRhzwOGYluydNFTu2BIolOyOOwIjHX5AHEMVAHFJP+wf2rsayqyDF5RvAxcXh0kkSe1yZ9kgLDAzFPTeWDkQRpd0IB33Wodic6ONxxmbzVI\\\/lEWtsiOH8xju9\\\/Z4lW9KoVHnSfCI+BXrOymBQ3SDKohnrGXEfyA7PDJ8KjUKnRq0oCjdHsbiL5Z4NPRIzAp0TySwkUY6CdqnC2+ETEGGiKCqUEWv0CuiqcLT4RUX0cKhXaEmgXga+jQpmlxWphrSJRZmmxWljrkGgVgQ+oVWhLoIx5igopZiodElVmKrvdCYVEO\\\/VxyLiwJFCVfaRSoY5PhEIi1bbolEQ79XHIVJgfDAaD4s0f\\\/OgCIv+6ZVshAJy\\\/OIHmQKVp0x29OaVtpgr1RG2t2I0N5Vo+kZkZhjc7P7a1YotexORUGt9+7u+WKQxG\\\/PfjJL775BdM9y0VSMmd4PkkIrz2iVj5Rcg+EULf7PI\\\/RNhxYkkgJYLTLqrVyeQge+WdvJI6blC7\\\/A8RdpxYEqiKeVbFVOuQqBovdcc1HfI4jDHPVpDFVNvOwjIVUmKqKSRSJxsqiU7IA9QqlHEhNWeJWUi8MVk202z1iVhlIQHqbCYpgaGeMTQF+rLu7WvxY99O+19kNvtEWl+JmNZ8nR1rpSkR0q2cOBY6zSeZLT4RcSyk5JMorTHG999NPsls8ImIYyFlNaIkkKvQbTYTMDt8IlyF1Gwmkpz2tfgRHoi5zmYC7lmgvfCJcBJ1fCIqcBVSU9cKOv50lRQLA8g31TxWhuK0CQ\\\/EEO4fx+3hx0mdVOFwx2XU1S4itf3LV0dIsTAq8FgZH2OM6QQViaAkSotoCvTh\\\/MW49gkhVuBnGVB9GIBeUJEIMcjI8+gsFcIDsczBD174MIzj3tnOTVpZo15EZ1muA2VEOiWOw3jSh5NzaowQT9LQPQeGQ0akbVgbh2XM1qfwOsP8XP84KfKeCquIfjfnAzrKgGfM2+gsGazOmXGqQrtzXJyq0IgHLjoL8MbHYoRTHwYFD2R0llsfixFufBheIycEuvWxiHDjw\\\/AaOSGQogiqClXq02nTC+SEwOhN9WLVzsciguzDILTpBXKjQBc+FhFUHwalTS\\\/geYClHTZ+\\\/RTOfDhu+Uz3zC476zHH+kcX4dTbGx33VQc5m4WDLStsn+naGVUqlLXlNXKmQADY\\\/ORpnOr7JOuekxPjAHsVbly7GCfe2uC6r1Tc94x1I4IW45JTK7edCq3a0IFuxrqtAu3yh6mHxdrhK988jRPn7qrQqfo4RBVuXrcYf\\\/uzM\\\/XZ5Q\\\/bJVpzmBSoUpxbRRrHJ7dndokqdDL2qRSneu55xjoFW791Bv2DcVfq4+AqrF1VjN4315M\\\/51nG+of\\\/iLGfHhjyJGP9Z7tWKP21ANB7+gaOn7kp9S\\\/roPWVCLas\\\/yy2bihVlu0+HsXeA0OeZKz\\\/fNcK\\\/A+fbwenvaUJAAAAAABJRU5ErkJggg==\",\"updated_at\":\"2024-01-02 12:49:15\"}"}
\ No newline at end of file
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:55 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "4367",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5101236d4303b5-ZRH",
+ "x-ratelimit-remaining-minute": "996",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "996",
+ "ratelimit-reset": "5",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "c89d35b7f4ef1c8ff3d0bfcc47f689bb",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":2,\"nr\":\"000002\",\"contact_type_id\":1,\"name_1\":\"John\",\"name_2\":\"\",\"salutation_id\":null,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"\",\"street_name\":null,\"house_number\":null,\"address_addition\":null,\"postcode\":\"\",\"city\":\"\",\"country_id\":null,\"mail\":\"\",\"mail_second\":\"\",\"phone_fixed\":\"\",\"phone_fixed_second\":\"\",\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":null,\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"profile_image\":\"iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKq0lEQVR4nNVcbWwUxxl+znYNGLChlq22MbExHArQYivFmC8V4j+NjKsmbaOqrcRJaaISJ6qEFVS1UDi3\\\/EhD5UgtH+mPNLbUNhVNm0ayL7EiHFPxfU5qU2KEr3ZNoSX4BPGdD8PZ55v+IHPsze7OvLO7XPEjWfLuzs3MPffsfLwfg0Pto8wrnOsf96yu+wUv+3iofZRhSd0xdic540mF27aHPannfsKrPt5JzrAldcdY3tVrd\\\/DaG1fgFuGBGEI9Y67rud8I9YwhPBBzXc9rb1zB1Wt3kAcALx0aRnIq7arC1raI607lCm77mpxK46VDwwBwl0C3Kpwt6uNwq0KuPuBTAgF3KtT5RcMDMTQF+lDfdNIT0kM9Y6hvOommQJ8WKU5VaFQfYCDQqQqp6hOJc0ukSJwukU5VaFQfAPh8FV2MX1R8fi4iJ7ZiTmGe5Yet0BToyyIgfaUx63l4IIbWtoiSpLqaEuxr8aOxoVxaLtQzhta2iPLLNzaUY1+LH3U1JVn385aEssp0dqyV1mNEcioN\\\/+beLAKzmNJVoUx9ugpTlXeiMFV5XRWK6gMEBQJ6KhTVBwBnOzeRFKcCVyQAkuJU4Iqsbzppuk9RoZX6AKBALBhPpJBMpkkERm8kTfcGhyZwaSSh\\\/KwKo1dvY3AokfnfLS6NJDA4NGG6b\\\/UdrJBMphFPpEz3TSztfHYpiheaeLUEV4gRgacqcLF3C15vW4NlVUWkeowoKy3Ey7sfwcjpx\\\/Dijmq8uKMaI6cfw8u7H0FZaaF2fcuqivB62xpc7N2CwFMVpO9gheKFBdj57FLT\\\/axXuHhhAf59toFMIADUN53Mer2Mk0hqhuH3f\\\/kP9v\\\/qnxgenZTWU1ZaiF07qvFcoBLz5+Vblrl1ewZHOi7jwKsjiN6Ykta3rKoIe364HN\\\/7xkMoyPdl7hsnkbqaEpzt3CStx4j4RAoP1\\\/cgPnFPiVkK1FEfh+wXLMj3KRUpKs6OPACYPy9fqUhRcUbydPpuBUsV+iq6mK+ii5Ws7Gax+LSjjfW6bScYr0eG6VSatR+9wpZvfp+V17zHDhwZZonJlKM2GWMsMZliB44Ms\\\/Ka99jyze+z9qNX2HQqLf0M7+e6bScctRmLT7OSld2ZejIEBtuGHFXIGGNdx66TCOSYTqVdESciMZlSEsfB+9l17Lrj9oJtQ5l68jLSfMY8QFLR2FBuWrDKUJDvk76qupg\\\/L1\\\/6qoqoqylRLthl2PnMvaEuD3A29onQHU\\\/+n3Db16yx0M3YJ8LpuJJLeNVHPhbm\\\/\\\/gne4Nf3VLmwe8KPPS5ufAvne9JXfcLXvVxzpw8JKfS8DHGmLo4HcZ1lh2aA5VY5V+AF\\\/Z85EmbB\\\/evxmAkgcMdl5VlRWOHW7gb+BygOVCJg\\\/tXZ67dknhw\\\/2o0Byoz1xQSvQTdbuUBRPLEa12I5InXuUDOCLQjyymJdmTlmsScEKgiSZdEFUm5JFFJoFvTuxU53cejprGKSqIVOYc7LqP7eFRZjgJtH4vdOudc\\\/zjbtj2c2bIY95CybZCx7PO7L5iev9s7xuZWv8N8FV3MKiriUPuoqU3+Jys\\\/t\\\/od9m7vmOn587svZNVhh65j17P29Pxv2\\\/awNJrBtIxx68Pgyxg75T3x9AdZ3j87RYmzM6XcnMI8\\\/PW3X4a4rn1hz0cZxYvLGLc+lgyBVOJEiETmLQmRyeNQkUMlGVCTyAmkEidCJNJ3rn+ceenDCPVEtcjjsCMJAJk8DhmJjQ1lnvpYCrz2YazyLzA9Gx6dVDrtByPmPti5BKzKGpGcSt+1gG\\\/Jvr\\\/KvwCDQwlPfSz5bx1tCzYHKlH9cBEuXJrAJ+PTWhWVlRYi2OLH735di60bSlH\\\/tVMoKy1EXe2iTJm62kUoKy1EqCdqWYfslf\\\/j29dQV1uC5VX39q+NDeWI3pyyVZHsle\\\/+wzo0ByqxuPgz6B+MY\\\/L2jNb3XVZVhLa9K\\\/GbX3wJj36xJHsv7IUPg08i1HGLMl5SJgcOVbvGScQLH4vlMsZoehendZUpnrrsoCxzjH+UZQplWWQFo2tAbFflKpBaY4yKjE+klF4zwGyNsVPEYCShPdnIlLjKv4CkeJk1xqjI4oUF1ooTQDJnpWYYklNpkhneypxF2RVQZmrAnkQRdjM1xZx16\\\/YM5hTmkdwEpL2wWx+G1VhlBJU84O4M+8TTH5i2bkaoljkq6PhYcmaNsSNRhzwOGYluydNFTu2BIolOyOOwIjHX5AHEMVAHFJP+wf2rsayqyDF5RvAxcXh0kkSe1yZ9kgLDAzFPTeWDkQRpd0IB33Wodic6ONxxmbzVI\\\/lEWtsiOH8xju9\\\/Z4lW9KoVHnSfCI+BXrOymBQ3SDKohnrGXEfyA7PDJ8KjUKnRq0oCjdHsbiL5Z4NPRIzAp0TySwkUY6CdqnC2+ETEGGiKCqUEWv0CuiqcLT4RUX0cKhXaEmgXga+jQpmlxWphrSJRZmmxWljrkGgVgQ+oVWhLoIx5igopZiodElVmKrvdCYVEO\\\/VxyLiwJFCVfaRSoY5PhEIi1bbolEQ79XHIVJgfDAaD4s0f\\\/OgCIv+6ZVshAJy\\\/OIHmQKVp0x29OaVtpgr1RG2t2I0N5Vo+kZkZhjc7P7a1YotexORUGt9+7u+WKQxG\\\/PfjJL775BdM9y0VSMmd4PkkIrz2iVj5Rcg+EULf7PI\\\/RNhxYkkgJYLTLqrVyeQge+WdvJI6blC7\\\/A8RdpxYEqiKeVbFVOuQqBovdcc1HfI4jDHPVpDFVNvOwjIVUmKqKSRSJxsqiU7IA9QqlHEhNWeJWUi8MVk202z1iVhlIQHqbCYpgaGeMTQF+rLu7WvxY99O+19kNvtEWl+JmNZ8nR1rpSkR0q2cOBY6zSeZLT4RcSyk5JMorTHG999NPsls8ImIYyFlNaIkkKvQbTYTMDt8IlyF1Gwmkpz2tfgRHoi5zmYC7lmgvfCJcBJ1fCIqcBVSU9cKOv50lRQLA8g31TxWhuK0CQ\\\/EEO4fx+3hx0mdVOFwx2XU1S4itf3LV0dIsTAq8FgZH2OM6QQViaAkSotoCvTh\\\/MW49gkhVuBnGVB9GIBeUJEIMcjI8+gsFcIDsczBD174MIzj3tnOTVpZo15EZ1muA2VEOiWOw3jSh5NzaowQT9LQPQeGQ0akbVgbh2XM1qfwOsP8XP84KfKeCquIfjfnAzrKgGfM2+gsGazOmXGqQrtzXJyq0IgHLjoL8MbHYoRTHwYFD2R0llsfixFufBheIycEuvWxiHDjw\\\/AaOSGQogiqClXq02nTC+SEwOhN9WLVzsciguzDILTpBXKjQBc+FhFUHwalTS\\\/geYClHTZ+\\\/RTOfDhu+Uz3zC476zHH+kcX4dTbGx33VQc5m4WDLStsn+naGVUqlLXlNXKmQADY\\\/ORpnOr7JOuekxPjAHsVbly7GCfe2uC6r1Tc94x1I4IW45JTK7edCq3a0IFuxrqtAu3yh6mHxdrhK988jRPn7qrQqfo4RBVuXrcYf\\\/uzM\\\/XZ5Q\\\/bJVpzmBSoUpxbRRrHJ7dndokqdDL2qRSneu55xjoFW791Bv2DcVfq4+AqrF1VjN4315M\\\/51nG+of\\\/iLGfHhjyJGP9Z7tWKP21ANB7+gaOn7kp9S\\\/roPWVCLas\\\/yy2bihVlu0+HsXeA0OeZKz\\\/fNcK\\\/A+fbwenvaUJAAAAAABJRU5ErkJggg==\",\"updated_at\":\"2025-11-27 11:39:55\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/delete-a-contact.json b/tests/Fixtures/Saloon/Contacts/delete-a-contact.json
index daa90f5..7d59919 100644
--- a/tests/Fixtures/Saloon/Contacts/delete-a-contact.json
+++ b/tests/Fixtures/Saloon/Contacts/delete-a-contact.json
@@ -1 +1,24 @@
-{"statusCode":404,"headers":{"Date":"Tue, 02 Jan 2024 11:49:35 GMT","Content-Type":"application\/json","Transfer-Encoding":"chunked","Connection":"keep-alive","ratelimit-reset":"25","x-ratelimit-remaining-minute":"933","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"933","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c792f9e47785-LHR"},"data":"{\"error_code\":404,\"message\":\"Page not found\"}"}
\ No newline at end of file
+{
+ "statusCode": 404,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:55 GMT",
+ "Content-Type": "application\/json",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5101220df20204-ZRH",
+ "ratelimit-reset": "5",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "997",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"error_code\":404,\"message\":\"Page not found\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/edit-contact.json b/tests/Fixtures/Saloon/Contacts/edit-contact.json
index bb24344..91769d0 100644
--- a/tests/Fixtures/Saloon/Contacts/edit-contact.json
+++ b/tests/Fixtures/Saloon/Contacts/edit-contact.json
@@ -1 +1,24 @@
-{"statusCode":404,"headers":{"Date":"Tue, 02 Jan 2024 11:49:16 GMT","Content-Type":"application\/json","Transfer-Encoding":"chunked","Connection":"keep-alive","ratelimit-reset":"44","x-ratelimit-remaining-minute":"994","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"994","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c716783c71b4-LHR"},"data":"{\"error_code\":404,\"message\":\"Page not found\"}"}
\ No newline at end of file
+{
+ "statusCode": 404,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:56 GMT",
+ "Content-Type": "application\/json",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5101274bcf2397-ZRH",
+ "x-ratelimit-remaining-minute": "995",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "995",
+ "ratelimit-reset": "4",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"error_code\":404,\"message\":\"Page not found\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/fetch-a-contact.json b/tests/Fixtures/Saloon/Contacts/fetch-a-contact.json
index fe30e43..0ad02b5 100644
--- a/tests/Fixtures/Saloon/Contacts/fetch-a-contact.json
+++ b/tests/Fixtures/Saloon/Contacts/fetch-a-contact.json
@@ -1 +1,25 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:32 GMT","Content-Type":"application\/json","Content-Length":"4408","Connection":"keep-alive","x-ratelimit-remaining-minute":"946","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"946","ratelimit-limit":"1000","ratelimit-reset":"28","etag":"afbd41a73ac4b6db063793ef7aceb4d2","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c77b5e9060db-LHR"},"data":"{\"id\":1,\"nr\":\"000001\",\"contact_type_id\":1,\"name_1\":\"bexio AG\",\"name_2\":\"\",\"salutation_id\":0,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"Alte Jonastrasse 24\",\"postcode\":\"8640\",\"city\":\"Rapperswil\",\"country_id\":1,\"mail\":\"support@bexio.com\",\"mail_second\":null,\"phone_fixed\":\"+41 (0) 71 552 00 60\",\"phone_fixed_second\":null,\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"https:\\\/\\\/www.bexio.com\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":\"1\",\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"profile_image\":\"iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKvUlEQVR4nO1cbWxT1xl+cm1QGGkxBAcoH3G+Y99QaGi+qtVIKaWtzY+maMkKTbdkErTQShPqUqBVFRXQKpjYpgGGSm3ohMYSYOm2YlhgaZsyHAq02xTjZiklRglJ7YQ4y5dJDNkPc5zr+23fCzOSn1+55577vvc+fnzOueeJ34TJyclJqAC3y43mhmb8t38QPo8P3m6vonhJuiRk5+cAAP7zVTuGfcOK4ukX6qFL0eHh5FkoLS9FqjFVUTwCSmkAt8sNW40Nezbsxrwl8+Dt7sO2w9tRub0S+oX6iOMl6ZLw\\\/KYyvHtsB26N3cKtsVt499gOPL+pDEm6pIjj6RfqUbm9EtsOb4e3uw\\\/zlszDng27Yauxwe1yRxyPDW20F7pdbtjr7HA62gAAiTMTUVpeCvuHJ9F6qhXmMjMKVhfiYtOXOP3RaUlFJumSsGrd0zCXmTE9cTrcLncods+1Hqx6cRXMZWa0NLbg7B\\\/OSCpSv1CPZ3\\\/yLApWF4LSUGhpbIHPM4DS8lI01\\\/8dTkcbnI420CV5sFRZolZkQqRfYTZxBJZqKyxVFrz25GboUmaj9o+10E4Lfj53bt8RJJJNHIGtxhbKQZfk4dXdr4bOjfvHBYlkEwcAgYkAan9cC59nAPu+2A97nR32D0+GXRctkbIVKEQcMKU+Ap9nAOc\\\/OQ9zmRkAQGkoFD1XHKbIsZExXuJILmYep6MNbpc79HDTE6dzFDlj5gwOcQTnPzkPn2cgdExU6B\\\/xh+WIRpGSBIoRF7qhiqeQODMxrK3pSBOeWPNESIXAFJFjI370dga\\\/lnyw19l525gqBKaI7Ov2Yr5hAYqeK+ZcF5gIoOlIU1hb4sxElFY8xVEhEDmRggTKIS50Mwz1EbBVSNDS2ILjvz0GAKAoCuVbKjh5+XKyVUjQsLce5\\\/58LhhPQ3HysdVHwKdCdj45RHJmYeasKkUewK8+gqYjTQhMBELHLY0taNhbL3gM8KtP6FzD3nq0NLYIHvOpj4CoUApOR5vorB1SoFzFcW6CR30ETBXykQUg9MDlWyoE1cd8GKJCNlkEJIe5zCyoPgIpFbJz8ylSGw1xoRsQUR9B05EmBMYD+NO+E4J9CBH9vTclc9rr7EieP4eXPIKGvfUIjAfQ3NAsGktsLBQCm0jqwqnWqMiTUh+Bf2QMvZ09kv283V4M+4Yk+w37hmS95fR29sA\\\/MibZr7S8VFIEfHA62nDhVCuo8i0VnIFXDuSoj\\\/Rb9+Z60RzGQiM2vvcKLFVWyXiWKis2vvcKjIVGwT7mMjPWvble1hgndyzky1G+pSI4iURKolz1MfsJ5SDkaadpQZfQosuGVGMq6BIa2mlaQRLJgwHy1RWpCpk5QrNwJCRGoj5mP3YOJnkEYipknuMjkflggHx1RaJCdo6wZYwcEqNRH18OPvIACKqQqI8JJonsByNQU4V8OTjrQCkSo1UfgdvlRn\\\/vTYwOjaL9UjvvtXwqFFJm+6V2jA6Nor\\\/3Ju86TS0VCn1AvG8ipCN7qaBEfXzLJVvNAaQaU2Gpsoapi6iQEMKnPqfDCXvdyTDShN4c5K73hPoJkQcAmtra2lq+E3RJHoZ9w3B\\\/M3WDqyufEZ39gOA6jdnP7XLj6J6j+NjWCG+Xh9N\\\/sG8Ql85chLPVCd1cHVIWpwAAdHN1uHTmIgBgXc36ULvT4cRHOw7j7NGzGOwb5MTzdnlw\\\/q\\\/\\\/gPub60hZlAKdXgftdC0CE7fR8XUHLNXCYyyzH4EYeYDEZgJTiZGqL9IFevAVMlyRREV0Cc2rODGwF7xEXVJgqlCKPEDmfmDD3nokzX4IliqL5A0c2nYId27fiWpxzkSqMRUGkwEA0HmlU\\\/HuMV2SB0pDYeMvN0r2tdfZMTwwJEkeACT85vVfT6rpYXzVfFlRnHuN\\\/NIVqnoslNoeRqxDbY9F6\\\/MMqO5hxDKcjjZVPRZN4ZKC2u6rN2B+wQyNVoNFWYtgLjNj7iNz0fNdD0aHRsMCJemSYKm24qfvVCHrsSxotBoAwNE9R3ln2VjEYN8gCp4ugEarQfrSdJhfWIkZD\\\/0AXR1dGPePh\\\/XVL9Rj7etr8WLNOizOXowEKgGBiQA+eOcD+Ef8QQL9I348nDwrNOslUAkcIikNxUscEJxBP7Y13lcSlMDb5QFdkgedXgcAvETOSp7FIY7g3F\\\/O4fLZSwAYyxi1PQwm9n2xX9aD7Xp5J3quiW99LUhbgLd+\\\/7aseK89uVnwnFoeS4gttT2MWIdaHkvYu7DaHkasQw2PJYxAokKAnyx2+4OqPgKiQoBLFgGznc9j4bzKqe1hxDqUeiwcAiPxMNhLnAcRw74h3Ll9W7KfkMfC2Q9U28OIdSj1WMIIVNvDiHWo4bGEEai2hxHrUMNjocJOquhhxDrU8lhCbMj1MNhJgeAnaas5IHizu17eKeuhvF3SW2reLq\\\/seGKQ67GwxcH+b4aEzT\\\/cNJk4MxE7T+wKI1BoR5nPwwCAPRt2q\\\/Ivs\\\/cDqcZU\\\/OL9mrA2oR1vPo\\\/FP+LH22vfmtpMUNvDiHWo6bFo1fYwYl2FZOxTy2NJOLj14KSaHsbnJz5XFOdeY+Xalap6LJR\\\/ZAye698rvrH+nn4MDSjzGe4HhgaG0d\\\/TrziO5\\\/r38I+MxT2RSBH3ROKeiHLEPRGFiHsicU\\\/k\\\/4+4J6IC4p6IQsQ9ERUQ90QUIu6JKETcE1GAuCeiEHFPRAHinohCxD0RBYh7IgoR90QUIO6JKITanoh2dooOdHEeZ2snWtz47kZM18760c\\\/LFcUhcDqccLa2gaJL8mCrOXC3SodTceBYr52lFE6H824VjwOgS\\\/KgpYtpGEwGdF7pFPz1ZCS4Fx6Lmh5GtGCPmQaTAXQxHfyt3JULV3DgjfBd42iJfBBqZ0UCoclm0682w1RkCi6kTUUmGGgDOp2doQ58s6xcxHrtLDkQm6UNtAGmIhMAxpuItcqK\\\/W9wP51oiYzl2llikLO8sTLfockfxiIT0ug0XHNe470oUiJjvXYWN768dWEanQbjXfUBrN0YsV9zExAi5czasVw7i4A5q8pZG7I5CiPQWGhEWl66ZBBAHpFqeyxqeBhTsSIjDgDS8tI5e4acLX1rtRX7tvxOVkCA+9VmI9ZqZ0X6CseElecbytnSzy3IRfpSeSpkwu1y47Pjn3LaY6121mfHP42KvPSl6cgtyOW081bxlTMWskE2XNmIxGOxVq+RzGOtXqPIw5C6VghCnPASmPt4LjIezZAdXGi3OlKPxVRsgoFOE8xjoNNgKjYp8jDErhVCxqMZyH2cqz5ApI60XBUKkQdE57HwjTN855TUzoqURDEuBAnMWZGDjGWZooHFyIvWYzEWGpHOsxJI55sBFdTOkktixrJM5KzIETwvWsncWi1cJ0aMPEBh7ayf8dTO4mkDlNXOkkOiGAeAROWi7PwcZC7LxLf\\\/+jasXYo8pbWzyBh89d9XAfCPQWrVziIkHtp6EK4vXWHnMpdlhvYkhSBYO4tgzvxkXDh9IXQsRZ5atbOS588J5a3cVonkR+YCuDe1sygNhfzSfLhdbvQx9gxf2l6J5AXJYvRIF+LOzs9G1vIsdPyzQ5I8QN3aWZnLg2Nw9oqce147i63ErOVZyM7Plswjq3ZWx9cdaDryN0nyAHVrZ5HBu\\\/1y+32rnRWYCODQ1oNY\\\/dIzyHosSzLu\\\/wB9hHkIfDBOugAAAABJRU5ErkJggg==\",\"updated_at\":\"2009-06-09 08:37:17\"}"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:56 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "4442",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a51012ab8b4fbd6-ZRH",
+ "x-ratelimit-remaining-minute": "994",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "994",
+ "ratelimit-reset": "4",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "afbd41a73ac4b6db063793ef7aceb4d2",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":1,\"nr\":\"000001\",\"contact_type_id\":1,\"name_1\":\"bexio AG\",\"name_2\":\"\",\"salutation_id\":0,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"Alte Jonastrasse 24\",\"street_name\":\"Alte Jonastrasse\",\"house_number\":\"24\",\"address_addition\":null,\"postcode\":\"8640\",\"city\":\"Rapperswil\",\"country_id\":1,\"mail\":null,\"mail_second\":null,\"phone_fixed\":null,\"phone_fixed_second\":null,\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"https:\\\/\\\/www.bexio.com\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":\"1\",\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"profile_image\":\"iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKq0lEQVR4nNVcbWwUxxl+znYNGLChlq22MbExHArQYivFmC8V4j+NjKsmbaOqrcRJaaISJ6qEFVS1UDi3\\\/EhD5UgtH+mPNLbUNhVNm0ayL7EiHFPxfU5qU2KEr3ZNoSX4BPGdD8PZ55v+IHPsze7OvLO7XPEjWfLuzs3MPffsfLwfg0Pto8wrnOsf96yu+wUv+3iofZRhSd0xdic540mF27aHPannfsKrPt5JzrAldcdY3tVrd\\\/DaG1fgFuGBGEI9Y67rud8I9YwhPBBzXc9rb1zB1Wt3kAcALx0aRnIq7arC1raI607lCm77mpxK46VDwwBwl0C3Kpwt6uNwq0KuPuBTAgF3KtT5RcMDMTQF+lDfdNIT0kM9Y6hvOommQJ8WKU5VaFQfYCDQqQqp6hOJc0ukSJwukU5VaFQfAPh8FV2MX1R8fi4iJ7ZiTmGe5Yet0BToyyIgfaUx63l4IIbWtoiSpLqaEuxr8aOxoVxaLtQzhta2iPLLNzaUY1+LH3U1JVn385aEssp0dqyV1mNEcioN\\\/+beLAKzmNJVoUx9ugpTlXeiMFV5XRWK6gMEBQJ6KhTVBwBnOzeRFKcCVyQAkuJU4Iqsbzppuk9RoZX6AKBALBhPpJBMpkkERm8kTfcGhyZwaSSh\\\/KwKo1dvY3AokfnfLS6NJDA4NGG6b\\\/UdrJBMphFPpEz3TSztfHYpiheaeLUEV4gRgacqcLF3C15vW4NlVUWkeowoKy3Ey7sfwcjpx\\\/Dijmq8uKMaI6cfw8u7H0FZaaF2fcuqivB62xpc7N2CwFMVpO9gheKFBdj57FLT\\\/axXuHhhAf59toFMIADUN53Mer2Mk0hqhuH3f\\\/kP9v\\\/qnxgenZTWU1ZaiF07qvFcoBLz5+Vblrl1ewZHOi7jwKsjiN6Ykta3rKoIe364HN\\\/7xkMoyPdl7hsnkbqaEpzt3CStx4j4RAoP1\\\/cgPnFPiVkK1FEfh+wXLMj3KRUpKs6OPACYPy9fqUhRcUbydPpuBUsV+iq6mK+ii5Ws7Gax+LSjjfW6bScYr0eG6VSatR+9wpZvfp+V17zHDhwZZonJlKM2GWMsMZliB44Ms\\\/Ka99jyze+z9qNX2HQqLf0M7+e6bScctRmLT7OSld2ZejIEBtuGHFXIGGNdx66TCOSYTqVdESciMZlSEsfB+9l17Lrj9oJtQ5l68jLSfMY8QFLR2FBuWrDKUJDvk76qupg\\\/L1\\\/6qoqoqylRLthl2PnMvaEuD3A29onQHU\\\/+n3Db16yx0M3YJ8LpuJJLeNVHPhbm\\\/\\\/gne4Nf3VLmwe8KPPS5ufAvne9JXfcLXvVxzpw8JKfS8DHGmLo4HcZ1lh2aA5VY5V+AF\\\/Z85EmbB\\\/evxmAkgcMdl5VlRWOHW7gb+BygOVCJg\\\/tXZ67dknhw\\\/2o0Byoz1xQSvQTdbuUBRPLEa12I5InXuUDOCLQjyymJdmTlmsScEKgiSZdEFUm5JFFJoFvTuxU53cejprGKSqIVOYc7LqP7eFRZjgJtH4vdOudc\\\/zjbtj2c2bIY95CybZCx7PO7L5iev9s7xuZWv8N8FV3MKiriUPuoqU3+Jys\\\/t\\\/od9m7vmOn587svZNVhh65j17P29Pxv2\\\/awNJrBtIxx68Pgyxg75T3x9AdZ3j87RYmzM6XcnMI8\\\/PW3X4a4rn1hz0cZxYvLGLc+lgyBVOJEiETmLQmRyeNQkUMlGVCTyAmkEidCJNJ3rn+ceenDCPVEtcjjsCMJAJk8DhmJjQ1lnvpYCrz2YazyLzA9Gx6dVDrtByPmPti5BKzKGpGcSt+1gG\\\/Jvr\\\/KvwCDQwlPfSz5bx1tCzYHKlH9cBEuXJrAJ+PTWhWVlRYi2OLH735di60bSlH\\\/tVMoKy1EXe2iTJm62kUoKy1EqCdqWYfslf\\\/j29dQV1uC5VX39q+NDeWI3pyyVZHsle\\\/+wzo0ByqxuPgz6B+MY\\\/L2jNb3XVZVhLa9K\\\/GbX3wJj36xJHsv7IUPg08i1HGLMl5SJgcOVbvGScQLH4vlMsZoehendZUpnrrsoCxzjH+UZQplWWQFo2tAbFflKpBaY4yKjE+klF4zwGyNsVPEYCShPdnIlLjKv4CkeJk1xqjI4oUF1ooTQDJnpWYYklNpkhneypxF2RVQZmrAnkQRdjM1xZx16\\\/YM5hTmkdwEpL2wWx+G1VhlBJU84O4M+8TTH5i2bkaoljkq6PhYcmaNsSNRhzwOGYluydNFTu2BIolOyOOwIjHX5AHEMVAHFJP+wf2rsayqyDF5RvAxcXh0kkSe1yZ9kgLDAzFPTeWDkQRpd0IB33Wodic6ONxxmbzVI\\\/lEWtsiOH8xju9\\\/Z4lW9KoVHnSfCI+BXrOymBQ3SDKohnrGXEfyA7PDJ8KjUKnRq0oCjdHsbiL5Z4NPRIzAp0TySwkUY6CdqnC2+ETEGGiKCqUEWv0CuiqcLT4RUX0cKhXaEmgXga+jQpmlxWphrSJRZmmxWljrkGgVgQ+oVWhLoIx5igopZiodElVmKrvdCYVEO\\\/VxyLiwJFCVfaRSoY5PhEIi1bbolEQ79XHIVJgfDAaD4s0f\\\/OgCIv+6ZVshAJy\\\/OIHmQKVp0x29OaVtpgr1RG2t2I0N5Vo+kZkZhjc7P7a1YotexORUGt9+7u+WKQxG\\\/PfjJL775BdM9y0VSMmd4PkkIrz2iVj5Rcg+EULf7PI\\\/RNhxYkkgJYLTLqrVyeQge+WdvJI6blC7\\\/A8RdpxYEqiKeVbFVOuQqBovdcc1HfI4jDHPVpDFVNvOwjIVUmKqKSRSJxsqiU7IA9QqlHEhNWeJWUi8MVk202z1iVhlIQHqbCYpgaGeMTQF+rLu7WvxY99O+19kNvtEWl+JmNZ8nR1rpSkR0q2cOBY6zSeZLT4RcSyk5JMorTHG999NPsls8ImIYyFlNaIkkKvQbTYTMDt8IlyF1Gwmkpz2tfgRHoi5zmYC7lmgvfCJcBJ1fCIqcBVSU9cKOv50lRQLA8g31TxWhuK0CQ\\\/EEO4fx+3hx0mdVOFwx2XU1S4itf3LV0dIsTAq8FgZH2OM6QQViaAkSotoCvTh\\\/MW49gkhVuBnGVB9GIBeUJEIMcjI8+gsFcIDsczBD174MIzj3tnOTVpZo15EZ1muA2VEOiWOw3jSh5NzaowQT9LQPQeGQ0akbVgbh2XM1qfwOsP8XP84KfKeCquIfjfnAzrKgGfM2+gsGazOmXGqQrtzXJyq0IgHLjoL8MbHYoRTHwYFD2R0llsfixFufBheIycEuvWxiHDjw\\\/AaOSGQogiqClXq02nTC+SEwOhN9WLVzsciguzDILTpBXKjQBc+FhFUHwalTS\\\/geYClHTZ+\\\/RTOfDhu+Uz3zC476zHH+kcX4dTbGx33VQc5m4WDLStsn+naGVUqlLXlNXKmQADY\\\/ORpnOr7JOuekxPjAHsVbly7GCfe2uC6r1Tc94x1I4IW45JTK7edCq3a0IFuxrqtAu3yh6mHxdrhK988jRPn7qrQqfo4RBVuXrcYf\\\/uzM\\\/XZ5Q\\\/bJVpzmBSoUpxbRRrHJ7dndokqdDL2qRSneu55xjoFW791Bv2DcVfq4+AqrF1VjN4315M\\\/51nG+of\\\/iLGfHhjyJGP9Z7tWKP21ANB7+gaOn7kp9S\\\/roPWVCLas\\\/yy2bihVlu0+HsXeA0OeZKz\\\/fNcK\\\/A+fbwenvaUJAAAAAABJRU5ErkJggg==\",\"updated_at\":\"2009-06-09 08:37:17\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/fetch-a-list-of-contacts.json b/tests/Fixtures/Saloon/Contacts/fetch-a-list-of-contacts.json
index 9d65f10..d5a55ea 100644
--- a/tests/Fixtures/Saloon/Contacts/fetch-a-list-of-contacts.json
+++ b/tests/Fixtures/Saloon/Contacts/fetch-a-list-of-contacts.json
@@ -1 +1,24 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:36 GMT","Content-Type":"application\/json","Content-Length":"1054","Connection":"keep-alive","x-ratelimit-remaining-minute":"931","ratelimit-limit":"1000","ratelimit-remaining":"931","ratelimit-reset":"24","x-ratelimit-limit-minute":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c796a9260672-LHR"},"data":"[{\"id\":1,\"nr\":\"000001\",\"contact_type_id\":1,\"name_1\":\"bexio AG\",\"name_2\":\"\",\"salutation_id\":0,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"Alte Jonastrasse 24\",\"postcode\":\"8640\",\"city\":\"Rapperswil\",\"country_id\":1,\"mail\":\"support@bexio.com\",\"mail_second\":null,\"phone_fixed\":\"+41 (0) 71 552 00 60\",\"phone_fixed_second\":null,\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"https:\\\/\\\/www.bexio.com\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":\"1\",\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"updated_at\":\"2009-06-09 08:37:17\"},{\"id\":2,\"nr\":\"000002\",\"contact_type_id\":1,\"name_1\":\"John\",\"name_2\":\"\",\"salutation_id\":0,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"\",\"postcode\":\"\",\"city\":\"\",\"country_id\":null,\"mail\":\"\",\"mail_second\":\"\",\"phone_fixed\":\"\",\"phone_fixed_second\":\"\",\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":null,\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"updated_at\":\"2024-01-02 12:49:15\"}]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:42 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "620",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5100cbfa0d01eb-ZRH",
+ "ratelimit-reset": "19",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":1,\"nr\":\"000001\",\"contact_type_id\":1,\"name_1\":\"bexio AG\",\"name_2\":\"\",\"salutation_id\":0,\"salutation_form\":null,\"title_id\":null,\"birthday\":null,\"address\":\"Alte Jonastrasse 24\",\"street_name\":\"Alte Jonastrasse\",\"house_number\":\"24\",\"address_addition\":null,\"postcode\":\"8640\",\"city\":\"Rapperswil\",\"country_id\":1,\"mail\":null,\"mail_second\":null,\"phone_fixed\":null,\"phone_fixed_second\":null,\"phone_mobile\":\"\",\"fax\":\"\",\"url\":\"https:\\\/\\\/www.bexio.com\",\"skype_name\":\"\",\"remarks\":\"\",\"language_id\":null,\"is_lead\":false,\"contact_group_ids\":\"1\",\"contact_branch_ids\":null,\"user_id\":1,\"owner_id\":1,\"updated_at\":\"2009-06-09 08:37:17\"}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/restore-a-contact.json b/tests/Fixtures/Saloon/Contacts/restore-a-contact.json
index fb73010..b697d0d 100644
--- a/tests/Fixtures/Saloon/Contacts/restore-a-contact.json
+++ b/tests/Fixtures/Saloon/Contacts/restore-a-contact.json
@@ -1 +1,24 @@
-{"statusCode":404,"headers":{"Date":"Tue, 02 Jan 2024 11:49:19 GMT","Content-Type":"application\/json","Transfer-Encoding":"chunked","Connection":"keep-alive","ratelimit-reset":"41","x-ratelimit-remaining-minute":"988","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"988","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c72cf9c4dd86-LHR"},"data":"{\"error_code\":404,\"message\":\"Page not found\"}"}
\ No newline at end of file
+{
+ "statusCode": 404,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:54 GMT",
+ "Content-Type": "application\/json",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a51011f38c6e5d9-ZRH",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "6",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"error_code\":404,\"message\":\"Page not found\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Contacts/search-contacts.json b/tests/Fixtures/Saloon/Contacts/search-contacts.json
index b7bb56a..16df021 100644
--- a/tests/Fixtures/Saloon/Contacts/search-contacts.json
+++ b/tests/Fixtures/Saloon/Contacts/search-contacts.json
@@ -1 +1,24 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:22 GMT","Content-Type":"application\/json","Content-Length":"2","Connection":"keep-alive","x-ratelimit-remaining-minute":"499","ratelimit-limit":"500","ratelimit-remaining":"499","ratelimit-reset":"38","x-ratelimit-limit-minute":"500","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c73c3b935311-LHR"},"data":"[]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:39:55 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "2",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a510120de9da032-ZRH",
+ "x-ratelimit-remaining-minute": "249",
+ "ratelimit-limit": "250",
+ "ratelimit-remaining": "249",
+ "ratelimit-reset": "5",
+ "x-ratelimit-limit-minute": "250",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Countries/create-country.json b/tests/Fixtures/Saloon/Countries/create-country.json
index f57c02b..5ec67c6 100644
--- a/tests/Fixtures/Saloon/Countries/create-country.json
+++ b/tests/Fixtures/Saloon/Countries/create-country.json
@@ -1,16 +1,16 @@
{
"statusCode": 201,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:42:12 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:23 GMT",
"Content-Type": "application\/json",
"Content-Length": "72",
"Connection": "keep-alive",
- "CF-RAY": "9a4a7e8cec7503b5-ZRH",
- "x-ratelimit-remaining-minute": "998",
- "ratelimit-limit": "1000",
- "ratelimit-remaining": "998",
- "ratelimit-reset": "48",
+ "CF-RAY": "9a5107ab7e1b7dd2-ZRH",
+ "ratelimit-reset": "38",
"x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "992",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "992",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "{\"id\":47,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"}",
+ "data": "{\"id\":48,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"}",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Countries/delete-a-country.json b/tests/Fixtures/Saloon/Countries/delete-a-country.json
index 2a4d22c..3632655 100644
--- a/tests/Fixtures/Saloon/Countries/delete-a-country.json
+++ b/tests/Fixtures/Saloon/Countries/delete-a-country.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:42:13 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:21 GMT",
"Content-Type": "application\/json",
"Content-Length": "16",
"Connection": "keep-alive",
- "CF-RAY": "9a4a7e936c981a65-ZRH",
- "ratelimit-reset": "47",
+ "CF-RAY": "9a5107a06e4a273b-ZRH",
+ "x-ratelimit-remaining-minute": "995",
"x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "993",
+ "ratelimit-remaining": "995",
+ "ratelimit-reset": "39",
"ratelimit-limit": "1000",
- "ratelimit-remaining": "993",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
diff --git a/tests/Fixtures/Saloon/Countries/edit-a-country.json b/tests/Fixtures/Saloon/Countries/edit-a-country.json
index 9dd6641..5bdcaa1 100644
--- a/tests/Fixtures/Saloon/Countries/edit-a-country.json
+++ b/tests/Fixtures/Saloon/Countries/edit-a-country.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:42:12 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:20 GMT",
"Content-Type": "application\/json",
- "Content-Length": "79",
+ "Content-Length": "80",
"Connection": "keep-alive",
- "CF-RAY": "9a4a7e90686fbc47-ZRH",
- "ratelimit-reset": "48",
- "x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "995",
+ "CF-RAY": "9a510797fd93576e-ZRH",
+ "x-ratelimit-remaining-minute": "998",
"ratelimit-limit": "1000",
- "ratelimit-remaining": "995",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "41",
+ "x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "{\"id\":4,\"name\":\"Updated Country Name\",\"name_short\":\"BR\",\"iso_3166_alpha2\":\"BR\"}",
+ "data": "{\"id\":5,\"name\":\"Updated Country Name\",\"name_short\":\"CDN\",\"iso_3166_alpha2\":\"CA\"}",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Countries/fetch-a-country.json b/tests/Fixtures/Saloon/Countries/fetch-a-country.json
index 066018c..892ede7 100644
--- a/tests/Fixtures/Saloon/Countries/fetch-a-country.json
+++ b/tests/Fixtures/Saloon/Countries/fetch-a-country.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:42:13 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:22 GMT",
"Content-Type": "application\/json",
- "Content-Length": "66",
+ "Content-Length": "64",
"Connection": "keep-alive",
- "CF-RAY": "9a4a7e956a7831a4-ZRH",
- "ratelimit-reset": "47",
- "x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "991",
+ "CF-RAY": "9a5107aa3e8401e3-ZRH",
+ "x-ratelimit-remaining-minute": "993",
"ratelimit-limit": "1000",
- "ratelimit-remaining": "991",
+ "ratelimit-remaining": "993",
+ "ratelimit-reset": "38",
+ "x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "{\"id\":5,\"name\":\"Kanada\",\"name_short\":\"CDN\",\"iso_3166_alpha2\":\"CA\"}",
+ "data": "{\"id\":6,\"name\":\"China\",\"name_short\":\"CN\",\"iso_3166_alpha2\":\"CN\"}",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Countries/fetch-a-list-of-countries.json b/tests/Fixtures/Saloon/Countries/fetch-a-list-of-countries.json
index 26defc6..dbb03a4 100644
--- a/tests/Fixtures/Saloon/Countries/fetch-a-list-of-countries.json
+++ b/tests/Fixtures/Saloon/Countries/fetch-a-list-of-countries.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:42:13 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:23 GMT",
"Content-Type": "application\/json",
- "Content-Length": "3076",
+ "Content-Length": "3082",
"Connection": "keep-alive",
- "CF-RAY": "9a4a7e968ff775ff-ZRH",
- "ratelimit-remaining": "990",
- "ratelimit-reset": "47",
- "x-ratelimit-limit-minute": "1000",
+ "CF-RAY": "9a5107ae0b5e265f-ZRH",
"x-ratelimit-remaining-minute": "990",
"ratelimit-limit": "1000",
+ "ratelimit-remaining": "990",
+ "ratelimit-reset": "37",
+ "x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "[{\"id\":5,\"name\":\"Kanada\",\"name_short\":\"CDN\",\"iso_3166_alpha2\":\"CA\"},{\"id\":6,\"name\":\"China\",\"name_short\":\"CN\",\"iso_3166_alpha2\":\"CN\"},{\"id\":7,\"name\":\"Tschechische Republik\",\"name_short\":\"CZ\",\"iso_3166_alpha2\":\"CZ\"},{\"id\":8,\"name\":\"Frankreich\",\"name_short\":\"F\",\"iso_3166_alpha2\":\"FR\"},{\"id\":9,\"name\":\"Vereinigtes K\\u00f6nigreich\",\"name_short\":\"GB\",\"iso_3166_alpha2\":\"GB\"},{\"id\":10,\"name\":\"Italien\",\"name_short\":\"I\",\"iso_3166_alpha2\":\"IT\"},{\"id\":11,\"name\":\"Liechtenstein\",\"name_short\":\"FL\",\"iso_3166_alpha2\":\"LI\"},{\"id\":12,\"name\":\"Hong Kong\",\"name_short\":\"HK\",\"iso_3166_alpha2\":\"HK\"},{\"id\":13,\"name\":\"Portugal\",\"name_short\":\"PT\",\"iso_3166_alpha2\":\"PT\"},{\"id\":14,\"name\":\"\\u00c4gypten\",\"name_short\":\"EG\",\"iso_3166_alpha2\":\"EG\"},{\"id\":15,\"name\":\"USA\",\"name_short\":\"USA\",\"iso_3166_alpha2\":\"US\"},{\"id\":16,\"name\":\"Spanien\",\"name_short\":\"ES\",\"iso_3166_alpha2\":\"ES\"},{\"id\":17,\"name\":\"Australien\",\"name_short\":\"AU\",\"iso_3166_alpha2\":\"AU\"},{\"id\":18,\"name\":\"Argentinien\",\"name_short\":\"AR\",\"iso_3166_alpha2\":\"AR\"},{\"id\":19,\"name\":\"Malediven\",\"name_short\":\"MV\",\"iso_3166_alpha2\":\"MV\"},{\"id\":20,\"name\":\"Bulgarien\",\"name_short\":\"BG\",\"iso_3166_alpha2\":\"BG\"},{\"id\":21,\"name\":\"Rum\\u00e4nien\",\"name_short\":\"RO\",\"iso_3166_alpha2\":\"RO\"},{\"id\":22,\"name\":\"Luxemburg\",\"name_short\":\"LU\",\"iso_3166_alpha2\":\"LU\"},{\"id\":23,\"name\":\"T\\u00fcrkei\",\"name_short\":\"TR\",\"iso_3166_alpha2\":\"TR\"},{\"id\":24,\"name\":\"Israel\",\"name_short\":\"ISR\",\"iso_3166_alpha2\":\"IL\"},{\"id\":25,\"name\":\"Niederlande\",\"name_short\":\"NL\",\"iso_3166_alpha2\":\"NL\"},{\"id\":26,\"name\":\"Vereinigte Arabische Emirate\",\"name_short\":\"VAE\",\"iso_3166_alpha2\":\"AE\"},{\"id\":27,\"name\":\"Belgien\",\"name_short\":\"B\",\"iso_3166_alpha2\":\"BE\"},{\"id\":28,\"name\":\"Singapur\",\"name_short\":\"SIN\",\"iso_3166_alpha2\":\"SG\"},{\"id\":29,\"name\":\"Montenegro\",\"name_short\":\"MTN\",\"iso_3166_alpha2\":\"ME\"},{\"id\":30,\"name\":\"Katar\",\"name_short\":\"KAT\",\"iso_3166_alpha2\":\"QA\"},{\"id\":31,\"name\":\"D\\u00e4nemark\",\"name_short\":\"DK\",\"iso_3166_alpha2\":\"DK\"},{\"id\":32,\"name\":\"Schweden\",\"name_short\":\"SE\",\"iso_3166_alpha2\":\"SE\"},{\"id\":33,\"name\":\"Malaysia\",\"name_short\":\"MY\",\"iso_3166_alpha2\":\"MY\"},{\"id\":34,\"name\":\"Irland\",\"name_short\":\"IRL\",\"iso_3166_alpha2\":\"IE\"},{\"id\":35,\"name\":\"Norwegen\",\"name_short\":\"NO\",\"iso_3166_alpha2\":\"NO\"},{\"id\":36,\"name\":\"Finnland\",\"name_short\":\"FI\",\"iso_3166_alpha2\":\"FI\"},{\"id\":37,\"name\":\"Ungarn\",\"name_short\":\"HU\",\"iso_3166_alpha2\":\"HU\"},{\"id\":38,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":39,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":40,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":41,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":42,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":43,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":44,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":45,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":46,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":47,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"}]",
+ "data": "[{\"id\":6,\"name\":\"China\",\"name_short\":\"CN\",\"iso_3166_alpha2\":\"CN\"},{\"id\":7,\"name\":\"Tschechische Republik\",\"name_short\":\"CZ\",\"iso_3166_alpha2\":\"CZ\"},{\"id\":8,\"name\":\"Frankreich\",\"name_short\":\"F\",\"iso_3166_alpha2\":\"FR\"},{\"id\":9,\"name\":\"Vereinigtes K\\u00f6nigreich\",\"name_short\":\"GB\",\"iso_3166_alpha2\":\"GB\"},{\"id\":10,\"name\":\"Italien\",\"name_short\":\"I\",\"iso_3166_alpha2\":\"IT\"},{\"id\":11,\"name\":\"Liechtenstein\",\"name_short\":\"FL\",\"iso_3166_alpha2\":\"LI\"},{\"id\":12,\"name\":\"Hong Kong\",\"name_short\":\"HK\",\"iso_3166_alpha2\":\"HK\"},{\"id\":13,\"name\":\"Portugal\",\"name_short\":\"PT\",\"iso_3166_alpha2\":\"PT\"},{\"id\":14,\"name\":\"\\u00c4gypten\",\"name_short\":\"EG\",\"iso_3166_alpha2\":\"EG\"},{\"id\":15,\"name\":\"USA\",\"name_short\":\"USA\",\"iso_3166_alpha2\":\"US\"},{\"id\":16,\"name\":\"Spanien\",\"name_short\":\"ES\",\"iso_3166_alpha2\":\"ES\"},{\"id\":17,\"name\":\"Australien\",\"name_short\":\"AU\",\"iso_3166_alpha2\":\"AU\"},{\"id\":18,\"name\":\"Argentinien\",\"name_short\":\"AR\",\"iso_3166_alpha2\":\"AR\"},{\"id\":19,\"name\":\"Malediven\",\"name_short\":\"MV\",\"iso_3166_alpha2\":\"MV\"},{\"id\":20,\"name\":\"Bulgarien\",\"name_short\":\"BG\",\"iso_3166_alpha2\":\"BG\"},{\"id\":21,\"name\":\"Rum\\u00e4nien\",\"name_short\":\"RO\",\"iso_3166_alpha2\":\"RO\"},{\"id\":22,\"name\":\"Luxemburg\",\"name_short\":\"LU\",\"iso_3166_alpha2\":\"LU\"},{\"id\":23,\"name\":\"T\\u00fcrkei\",\"name_short\":\"TR\",\"iso_3166_alpha2\":\"TR\"},{\"id\":24,\"name\":\"Israel\",\"name_short\":\"ISR\",\"iso_3166_alpha2\":\"IL\"},{\"id\":25,\"name\":\"Niederlande\",\"name_short\":\"NL\",\"iso_3166_alpha2\":\"NL\"},{\"id\":26,\"name\":\"Vereinigte Arabische Emirate\",\"name_short\":\"VAE\",\"iso_3166_alpha2\":\"AE\"},{\"id\":27,\"name\":\"Belgien\",\"name_short\":\"B\",\"iso_3166_alpha2\":\"BE\"},{\"id\":28,\"name\":\"Singapur\",\"name_short\":\"SIN\",\"iso_3166_alpha2\":\"SG\"},{\"id\":29,\"name\":\"Montenegro\",\"name_short\":\"MTN\",\"iso_3166_alpha2\":\"ME\"},{\"id\":30,\"name\":\"Katar\",\"name_short\":\"KAT\",\"iso_3166_alpha2\":\"QA\"},{\"id\":31,\"name\":\"D\\u00e4nemark\",\"name_short\":\"DK\",\"iso_3166_alpha2\":\"DK\"},{\"id\":32,\"name\":\"Schweden\",\"name_short\":\"SE\",\"iso_3166_alpha2\":\"SE\"},{\"id\":33,\"name\":\"Malaysia\",\"name_short\":\"MY\",\"iso_3166_alpha2\":\"MY\"},{\"id\":34,\"name\":\"Irland\",\"name_short\":\"IRL\",\"iso_3166_alpha2\":\"IE\"},{\"id\":35,\"name\":\"Norwegen\",\"name_short\":\"NO\",\"iso_3166_alpha2\":\"NO\"},{\"id\":36,\"name\":\"Finnland\",\"name_short\":\"FI\",\"iso_3166_alpha2\":\"FI\"},{\"id\":37,\"name\":\"Ungarn\",\"name_short\":\"HU\",\"iso_3166_alpha2\":\"HU\"},{\"id\":38,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":39,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":40,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":41,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":42,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":43,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":44,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":45,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":46,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":47,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"},{\"id\":48,\"name\":\"Test Country\",\"name_short\":\"TC\",\"iso_3166_alpha2\":\"TC\"}]",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Countries/search-countries.json b/tests/Fixtures/Saloon/Countries/search-countries.json
index 1cb63f4..63d59b8 100644
--- a/tests/Fixtures/Saloon/Countries/search-countries.json
+++ b/tests/Fixtures/Saloon/Countries/search-countries.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:42:12 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:20 GMT",
"Content-Type": "application\/json",
"Content-Length": "731",
"Connection": "keep-alive",
- "CF-RAY": "9a4a7e8e4fcc2680-ZRH",
- "x-ratelimit-remaining-minute": "997",
- "ratelimit-limit": "1000",
+ "CF-RAY": "9a51079e3c20985f-ZRH",
"ratelimit-remaining": "997",
- "ratelimit-reset": "48",
+ "ratelimit-reset": "40",
"x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
diff --git a/tests/Fixtures/Saloon/Currencies/create-a-currency.json b/tests/Fixtures/Saloon/Currencies/create-a-currency.json
index f24e533..0b1c58b 100644
--- a/tests/Fixtures/Saloon/Currencies/create-a-currency.json
+++ b/tests/Fixtures/Saloon/Currencies/create-a-currency.json
@@ -1 +1,24 @@
-{"statusCode":201,"headers":{"Date":"Tue, 02 Jan 2024 11:49:39 GMT","Content-Type":"application\/json","Content-Length":"41","Connection":"keep-alive","ratelimit-reset":"21","x-ratelimit-remaining-minute":"920","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"920","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c7a8ec187187-LHR"},"data":"{\"id\":8,\"name\":\"JPY\",\"round_factor\":0.05}"}
\ No newline at end of file
+{
+ "statusCode": 422,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:52 GMT",
+ "Content-Type": "application\/json",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5103ffc9cebc60-ZRH",
+ "ratelimit-remaining": "997",
+ "ratelimit-reset": "8",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"error_code\":422,\"message\":\"validation failed\",\"errors\":{\"name\":{\"type\":\"unique_object\",\"message\":\"Must be unique. JPY is already taken\"}}}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Currencies/delete-a-currency.json b/tests/Fixtures/Saloon/Currencies/delete-a-currency.json
index c4d9e8d..f756701 100644
--- a/tests/Fixtures/Saloon/Currencies/delete-a-currency.json
+++ b/tests/Fixtures/Saloon/Currencies/delete-a-currency.json
@@ -1 +1,24 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:37 GMT","Content-Type":"application\/json","Content-Length":"16","Connection":"keep-alive","ratelimit-reset":"23","x-ratelimit-remaining-minute":"926","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"926","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c79eb8be6533-LHR"},"data":"{\"success\":true}"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:53 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5104037dcd0219-ZRH",
+ "x-ratelimit-remaining-minute": "994",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "994",
+ "ratelimit-reset": "7",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Currencies/edit-a-currency.json b/tests/Fixtures/Saloon/Currencies/edit-a-currency.json
index cca7c82..03a26d9 100644
--- a/tests/Fixtures/Saloon/Currencies/edit-a-currency.json
+++ b/tests/Fixtures/Saloon/Currencies/edit-a-currency.json
@@ -1 +1,24 @@
-{"statusCode":404,"headers":{"Date":"Tue, 02 Jan 2024 11:49:29 GMT","Content-Type":"application\/json","Transfer-Encoding":"chunked","Connection":"keep-alive","x-ratelimit-remaining-minute":"955","ratelimit-limit":"1000","ratelimit-remaining":"955","ratelimit-reset":"31","x-ratelimit-limit-minute":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c76b897048bb-LHR"},"data":"{\"error_code\":404,\"message\":\"Page not found\"}"}
\ No newline at end of file
+{
+ "statusCode": 404,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:52 GMT",
+ "Content-Type": "application\/json",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5104010d8e1453-ZRH",
+ "x-ratelimit-remaining-minute": "996",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "996",
+ "ratelimit-reset": "8",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"error_code\":404,\"message\":\"Page not found\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Currencies/fetch-a-currency.json b/tests/Fixtures/Saloon/Currencies/fetch-a-currency.json
index d8e73d2..38eb8ce 100644
--- a/tests/Fixtures/Saloon/Currencies/fetch-a-currency.json
+++ b/tests/Fixtures/Saloon/Currencies/fetch-a-currency.json
@@ -1 +1,25 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:35 GMT","Content-Type":"application\/json","Content-Length":"41","Connection":"keep-alive","x-ratelimit-remaining-minute":"935","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"935","ratelimit-limit":"1000","ratelimit-reset":"25","etag":"16d4e2a00c8970c4b1d16128ffb9f89f","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c78fdae263d3-LHR"},"data":"{\"id\":1,\"name\":\"CHF\",\"round_factor\":0.05}"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:53 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "41",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5104027c3edf5e-ZRH",
+ "x-ratelimit-remaining-minute": "995",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "995",
+ "ratelimit-reset": "7",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "16d4e2a00c8970c4b1d16128ffb9f89f",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":1,\"name\":\"CHF\",\"round_factor\":0.05}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Currencies/fetch-a-list-of-currencies.json b/tests/Fixtures/Saloon/Currencies/fetch-a-list-of-currencies.json
index b6f88ed..4db2163 100644
--- a/tests/Fixtures/Saloon/Currencies/fetch-a-list-of-currencies.json
+++ b/tests/Fixtures/Saloon/Currencies/fetch-a-list-of-currencies.json
@@ -1 +1,27 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:37 GMT","Content-Type":"application\/json","Content-Length":"295","Connection":"keep-alive","x-ratelimit-remaining-minute":"928","ratelimit-limit":"1000","ratelimit-remaining":"928","ratelimit-reset":"23","x-ratelimit-limit-minute":"1000","x-total-count":"7","x-limit":"2000","x-offset":"0","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c79b9da44177-LHR"},"data":"[{\"id\":1,\"name\":\"CHF\",\"round_factor\":0.05},{\"id\":2,\"name\":\"EUR\",\"round_factor\":0.01},{\"id\":3,\"name\":\"USD\",\"round_factor\":0.01},{\"id\":4,\"name\":\"GBP\",\"round_factor\":0.01},{\"id\":5,\"name\":\"BRL\",\"round_factor\":0.01},{\"id\":6,\"name\":\"JPY\",\"round_factor\":0.01},{\"id\":7,\"name\":\"CNY\",\"round_factor\":0.01}]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:10 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "295",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5102f83f953d61-ZRH",
+ "ratelimit-reset": "50",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "x-total-count": "7",
+ "x-limit": "2000",
+ "x-offset": "0",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":1,\"name\":\"CHF\",\"round_factor\":0.05},{\"id\":2,\"name\":\"EUR\",\"round_factor\":0.01},{\"id\":3,\"name\":\"USD\",\"round_factor\":0.01},{\"id\":4,\"name\":\"GBP\",\"round_factor\":0.01},{\"id\":5,\"name\":\"BRL\",\"round_factor\":0.01},{\"id\":6,\"name\":\"JPY\",\"round_factor\":0.01},{\"id\":7,\"name\":\"CNY\",\"round_factor\":0.01}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Currencies/fetch-all-possible-currency-codes.json b/tests/Fixtures/Saloon/Currencies/fetch-all-possible-currency-codes.json
index 55ddd67..cf3beb1 100644
--- a/tests/Fixtures/Saloon/Currencies/fetch-all-possible-currency-codes.json
+++ b/tests/Fixtures/Saloon/Currencies/fetch-all-possible-currency-codes.json
@@ -1 +1,24 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:33 GMT","Content-Type":"application\/json","Content-Length":"1015","Connection":"keep-alive","ratelimit-reset":"27","x-ratelimit-remaining-minute":"940","x-ratelimit-limit-minute":"1000","ratelimit-remaining":"940","ratelimit-limit":"1000","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c7860bca3696-LHR"},"data":"[\"AED\",\"AFN\",\"ALL\",\"AMD\",\"ANG\",\"AOA\",\"ARS\",\"AUD\",\"AWG\",\"AZN\",\"BAM\",\"BBD\",\"BDT\",\"BGN\",\"BHD\",\"BIF\",\"BMD\",\"BND\",\"BOB\",\"BOV\",\"BRL\",\"BSD\",\"BTN\",\"BWP\",\"BYN\",\"BZD\",\"CAD\",\"CDF\",\"CHE\",\"CHF\",\"CHW\",\"CLF\",\"CLP\",\"CNY\",\"COP\",\"COU\",\"CRC\",\"CUC\",\"CUP\",\"CVE\",\"CZK\",\"DJF\",\"DKK\",\"DOP\",\"DZD\",\"EGP\",\"ERN\",\"ETB\",\"EUR\",\"FJD\",\"FKP\",\"GBP\",\"GEL\",\"GHS\",\"GIP\",\"GMD\",\"GNF\",\"GTQ\",\"GYD\",\"HKD\",\"HNL\",\"HRK\",\"HTG\",\"HUF\",\"IDR\",\"ILS\",\"INR\",\"IQD\",\"IRR\",\"ISK\",\"JMD\",\"JOD\",\"JPY\",\"KES\",\"KGS\",\"KHR\",\"KMF\",\"KPW\",\"KRW\",\"KWD\",\"KYD\",\"KZT\",\"LAK\",\"LBP\",\"LKR\",\"LRD\",\"LSL\",\"LYD\",\"MAD\",\"MDL\",\"MGA\",\"MKD\",\"MMK\",\"MNT\",\"MOP\",\"MRU\",\"MUR\",\"MVR\",\"MWK\",\"MXN\",\"MXV\",\"MYR\",\"MZN\",\"NAD\",\"NGN\",\"NIO\",\"NOK\",\"NPR\",\"NZD\",\"OMR\",\"PAB\",\"PEN\",\"PGK\",\"PHP\",\"PKR\",\"PLN\",\"PYG\",\"QAR\",\"RON\",\"RSD\",\"RUB\",\"RWF\",\"SAR\",\"SBD\",\"SCR\",\"SDG\",\"SEK\",\"SGD\",\"SHP\",\"SLL\",\"SOS\",\"SRD\",\"SSP\",\"STN\",\"SVC\",\"SYP\",\"SZL\",\"THB\",\"TJS\",\"TMT\",\"TND\",\"TOP\",\"TRY\",\"TTD\",\"TWD\",\"TZS\",\"UAH\",\"UGX\",\"USD\",\"USN\",\"UYI\",\"UYU\",\"UZS\",\"VEF\",\"VND\",\"VUV\",\"WST\",\"XAF\",\"XAF\",\"XCD\",\"XDR\",\"XOF\",\"XPF\",\"XSU\",\"XUA\",\"YER\",\"ZAR\",\"ZMW\",\"ZWL\"]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:52 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1015",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a5103feae25862a-ZRH",
+ "ratelimit-reset": "8",
+ "x-ratelimit-remaining-minute": "998",
+ "x-ratelimit-limit-minute": "1000",
+ "ratelimit-remaining": "998",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[\"AED\",\"AFN\",\"ALL\",\"AMD\",\"ANG\",\"AOA\",\"ARS\",\"AUD\",\"AWG\",\"AZN\",\"BAM\",\"BBD\",\"BDT\",\"BGN\",\"BHD\",\"BIF\",\"BMD\",\"BND\",\"BOB\",\"BOV\",\"BRL\",\"BSD\",\"BTN\",\"BWP\",\"BYN\",\"BZD\",\"CAD\",\"CDF\",\"CHE\",\"CHF\",\"CHW\",\"CLF\",\"CLP\",\"CNY\",\"COP\",\"COU\",\"CRC\",\"CUC\",\"CUP\",\"CVE\",\"CZK\",\"DJF\",\"DKK\",\"DOP\",\"DZD\",\"EGP\",\"ERN\",\"ETB\",\"EUR\",\"FJD\",\"FKP\",\"GBP\",\"GEL\",\"GHS\",\"GIP\",\"GMD\",\"GNF\",\"GTQ\",\"GYD\",\"HKD\",\"HNL\",\"HRK\",\"HTG\",\"HUF\",\"IDR\",\"ILS\",\"INR\",\"IQD\",\"IRR\",\"ISK\",\"JMD\",\"JOD\",\"JPY\",\"KES\",\"KGS\",\"KHR\",\"KMF\",\"KPW\",\"KRW\",\"KWD\",\"KYD\",\"KZT\",\"LAK\",\"LBP\",\"LKR\",\"LRD\",\"LSL\",\"LYD\",\"MAD\",\"MDL\",\"MGA\",\"MKD\",\"MMK\",\"MNT\",\"MOP\",\"MRU\",\"MUR\",\"MVR\",\"MWK\",\"MXN\",\"MXV\",\"MYR\",\"MZN\",\"NAD\",\"NGN\",\"NIO\",\"NOK\",\"NPR\",\"NZD\",\"OMR\",\"PAB\",\"PEN\",\"PGK\",\"PHP\",\"PKR\",\"PLN\",\"PYG\",\"QAR\",\"RON\",\"RSD\",\"RUB\",\"RWF\",\"SAR\",\"SBD\",\"SCR\",\"SDG\",\"SEK\",\"SGD\",\"SHP\",\"SLL\",\"SOS\",\"SRD\",\"SSP\",\"STN\",\"SVC\",\"SYP\",\"SZL\",\"THB\",\"TJS\",\"TMT\",\"TND\",\"TOP\",\"TRY\",\"TTD\",\"TWD\",\"TZS\",\"UAH\",\"UGX\",\"USD\",\"USN\",\"UYI\",\"UYU\",\"UZS\",\"VEF\",\"VND\",\"VUV\",\"WST\",\"XAF\",\"XAF\",\"XCD\",\"XDR\",\"XOF\",\"XPF\",\"XSU\",\"XUA\",\"YER\",\"ZAR\",\"ZMW\",\"ZWL\"]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Currencies/fetch-exchange-rates-for-currencies.json b/tests/Fixtures/Saloon/Currencies/fetch-exchange-rates-for-currencies.json
index e34a325..21469ed 100644
--- a/tests/Fixtures/Saloon/Currencies/fetch-exchange-rates-for-currencies.json
+++ b/tests/Fixtures/Saloon/Currencies/fetch-exchange-rates-for-currencies.json
@@ -1 +1,27 @@
-{"statusCode":200,"headers":{"Date":"Tue, 02 Jan 2024 11:49:27 GMT","Content-Type":"application\/json","Content-Length":"82","Connection":"keep-alive","x-ratelimit-remaining-minute":"962","ratelimit-limit":"1000","ratelimit-remaining":"962","ratelimit-reset":"33","x-ratelimit-limit-minute":"1000","x-total-count":"1","x-limit":"500","x-offset":"0","Cache-Control":"no-store","pragma":"no-cache","vary":"Origin","access-control-allow-origin":"https:\/\/office.bexio.com","via":"1.1 google","alt-svc":"h3=\":443\"; ma=86400","CF-Cache-Status":"DYNAMIC","Server":"cloudflare","CF-RAY":"83f2c75ea94d48b6-LHR"},"data":"[{\"factor_nr\":1.05,\"exchange_currency\":{\"id\":1,\"name\":\"CHF\",\"round_factor\":0.05}}]"}
\ No newline at end of file
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Thu, 27 Nov 2025 10:41:53 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "202",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a510405e960e5d9-ZRH",
+ "x-ratelimit-remaining-minute": "993",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "993",
+ "ratelimit-reset": "7",
+ "x-ratelimit-limit-minute": "1000",
+ "x-total-count": "1",
+ "x-limit": "500",
+ "x-offset": "0",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"factor_nr\":1.05,\"exchange_currency\":{\"id\":1,\"name\":\"CHF\",\"round_factor\":0.05},\"ratio\":1,\"factor_nr_to_ratio\":1.05,\"source\":\"custom\",\"source_reason\":\"source_custom\",\"exchange_rate_date\":\"2025-11-27\"}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/ItemPositions/edit-an-item-position/fetch-a-list-of-item-positions.json b/tests/Fixtures/Saloon/ItemPositions/edit-an-item-position/fetch-a-list-of-item-positions.json
new file mode 100644
index 0000000..e46524f
--- /dev/null
+++ b/tests/Fixtures/Saloon/ItemPositions/edit-an-item-position/fetch-a-list-of-item-positions.json
@@ -0,0 +1,17 @@
+{
+ "statusCode": 404,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:45:06 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "56",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58ee37a937e5d9-ZRH",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"status\":404,\"error\":\"Not Found\",\"message\":\"Not Found\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Items/create-item.json b/tests/Fixtures/Saloon/Items/create-item.json
index 5cbad00..7a70a9e 100644
--- a/tests/Fixtures/Saloon/Items/create-item.json
+++ b/tests/Fixtures/Saloon/Items/create-item.json
@@ -1,16 +1,16 @@
{
"statusCode": 201,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:31:47 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:20 GMT",
"Content-Type": "application\/json",
"Content-Length": "753",
"Connection": "keep-alive",
- "CF-RAY": "9a4a6f4a7f9f75ff-ZRH",
- "ratelimit-reset": "13",
+ "CF-RAY": "9a51079bec2abaad-ZRH",
+ "ratelimit-reset": "40",
"x-ratelimit-limit-minute": "400",
- "x-ratelimit-remaining-minute": "397",
+ "x-ratelimit-remaining-minute": "399",
"ratelimit-limit": "400",
- "ratelimit-remaining": "397",
+ "ratelimit-remaining": "399",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "{\"id\":8,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764171106\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":\"0\",\"stock_min_nr\":\"0\",\"stock_reserved_nr\":\"0\",\"stock_available_nr\":0,\"stock_picked_nr\":\"0\",\"stock_disposed_nr\":\"0\",\"stock_ordered_nr\":\"0\",\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null}",
+ "data": "{\"id\":9,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764240260\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":\"0\",\"stock_min_nr\":\"0\",\"stock_reserved_nr\":\"0\",\"stock_available_nr\":0,\"stock_picked_nr\":\"0\",\"stock_disposed_nr\":\"0\",\"stock_ordered_nr\":\"0\",\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null}",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Items/delete-an-item.json b/tests/Fixtures/Saloon/Items/delete-an-item.json
index 91939ad..5a83a76 100644
--- a/tests/Fixtures/Saloon/Items/delete-an-item.json
+++ b/tests/Fixtures/Saloon/Items/delete-an-item.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:31:46 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:27 GMT",
"Content-Type": "application\/json",
"Content-Length": "16",
"Connection": "keep-alive",
- "CF-RAY": "9a4a6f436cb1dc8b-ZRH",
- "x-ratelimit-remaining-minute": "398",
- "ratelimit-limit": "400",
- "ratelimit-remaining": "398",
- "ratelimit-reset": "15",
+ "CF-RAY": "9a5107c88ceabb16-ZRH",
+ "ratelimit-remaining": "392",
+ "ratelimit-reset": "33",
"x-ratelimit-limit-minute": "400",
+ "x-ratelimit-remaining-minute": "392",
+ "ratelimit-limit": "400",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
diff --git a/tests/Fixtures/Saloon/Items/edit-an-item.json b/tests/Fixtures/Saloon/Items/edit-an-item.json
index e9bf9aa..51c94bc 100644
--- a/tests/Fixtures/Saloon/Items/edit-an-item.json
+++ b/tests/Fixtures/Saloon/Items/edit-an-item.json
@@ -1,15 +1,15 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:31:48 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:26 GMT",
"Content-Type": "application\/json",
"Content-Length": "756",
"Connection": "keep-alive",
- "CF-RAY": "9a4a6f521de6a285-ZRH",
- "ratelimit-remaining": "392",
- "ratelimit-reset": "12",
+ "CF-RAY": "9a5107c1ed85985f-ZRH",
+ "ratelimit-reset": "34",
+ "x-ratelimit-remaining-minute": "394",
"x-ratelimit-limit-minute": "400",
- "x-ratelimit-remaining-minute": "392",
+ "ratelimit-remaining": "394",
"ratelimit-limit": "400",
"Cache-Control": "no-store",
"pragma": "no-cache",
diff --git a/tests/Fixtures/Saloon/Items/fetch-a-list-of-items.json b/tests/Fixtures/Saloon/Items/fetch-a-list-of-items.json
index fef3633..6b79de7 100644
--- a/tests/Fixtures/Saloon/Items/fetch-a-list-of-items.json
+++ b/tests/Fixtures/Saloon/Items/fetch-a-list-of-items.json
@@ -1,16 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:31:48 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:27 GMT",
"Content-Type": "application\/json",
- "Content-Length": "2969",
+ "Content-Length": "3722",
"Connection": "keep-alive",
- "CF-RAY": "9a4a6f514c5ca285-ZRH",
+ "CF-RAY": "9a5107c5eb80bb16-ZRH",
"x-ratelimit-remaining-minute": "393",
- "ratelimit-limit": "400",
- "ratelimit-remaining": "393",
- "ratelimit-reset": "12",
"x-ratelimit-limit-minute": "400",
+ "ratelimit-remaining": "393",
+ "ratelimit-reset": "33",
+ "ratelimit-limit": "400",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "[{\"id\":5,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764154888\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":6,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764154940\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":7,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764155025\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":8,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764171106\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null}]",
+ "data": "[{\"id\":5,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764154888\",\"intern_name\":\"Updated Item Name\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":null,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":6,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764154940\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":7,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764155025\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":8,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764171106\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null},{\"id\":9,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764240260\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null}]",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Items/fetch-an-item.json b/tests/Fixtures/Saloon/Items/fetch-an-item.json
index 01f8d0b..02ace54 100644
--- a/tests/Fixtures/Saloon/Items/fetch-an-item.json
+++ b/tests/Fixtures/Saloon/Items/fetch-an-item.json
@@ -1,15 +1,15 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:31:47 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:25 GMT",
"Content-Type": "application\/json",
- "Content-Length": "741",
+ "Content-Length": "752",
"Connection": "keep-alive",
- "CF-RAY": "9a4a6f4f3d6d3d61-ZRH",
- "x-ratelimit-remaining-minute": "394",
+ "CF-RAY": "9a5107bcdb28bc66-ZRH",
+ "x-ratelimit-remaining-minute": "396",
"ratelimit-limit": "400",
- "ratelimit-remaining": "394",
- "ratelimit-reset": "13",
+ "ratelimit-remaining": "396",
+ "ratelimit-reset": "35",
"x-ratelimit-limit-minute": "400",
"Cache-Control": "no-store",
"pragma": "no-cache",
@@ -19,6 +19,6 @@
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "{\"id\":5,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764154888\",\"intern_name\":\"Test Item\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":1,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null}",
+ "data": "{\"id\":5,\"user_id\":1,\"article_type_id\":1,\"contact_id\":null,\"deliverer_code\":\"\",\"deliverer_name\":\"\",\"deliverer_description\":\"\",\"intern_code\":\"TEST-1764154888\",\"intern_name\":\"Updated Item Name\",\"intern_description\":\"\",\"purchase_price\":null,\"sale_price\":null,\"purchase_total\":null,\"sale_total\":null,\"currency_id\":null,\"tax_income_id\":null,\"tax_id\":null,\"tax_expense_id\":null,\"unit_id\":null,\"is_stock\":false,\"stock_id\":null,\"stock_place_id\":null,\"stock_nr\":0,\"stock_min_nr\":0,\"stock_reserved_nr\":0,\"stock_available_nr\":0,\"stock_picked_nr\":0,\"stock_disposed_nr\":0,\"stock_ordered_nr\":0,\"width\":null,\"height\":null,\"weight\":null,\"volume\":null,\"html_text\":\"\",\"remarks\":\"\",\"delivery_price\":null,\"article_group_id\":null,\"account_id\":null,\"expense_account_id\":null}",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Items/search-items.json b/tests/Fixtures/Saloon/Items/search-items.json
index ee6b518..a0b7589 100644
--- a/tests/Fixtures/Saloon/Items/search-items.json
+++ b/tests/Fixtures/Saloon/Items/search-items.json
@@ -1,15 +1,15 @@
{
"statusCode": 200,
"headers": {
- "Date": "Wed, 26 Nov 2025 15:31:45 GMT",
+ "Date": "Thu, 27 Nov 2025 10:44:26 GMT",
"Content-Type": "application\/json",
"Content-Length": "2",
"Connection": "keep-alive",
- "CF-RAY": "9a4a6f402cffbe6d-ZRH",
- "ratelimit-remaining": "249",
- "ratelimit-reset": "15",
+ "CF-RAY": "9a5107bfbf3bbe85-ZRH",
+ "ratelimit-remaining": "248",
+ "ratelimit-reset": "34",
"x-ratelimit-limit-minute": "250",
- "x-ratelimit-remaining-minute": "249",
+ "x-ratelimit-remaining-minute": "248",
"ratelimit-limit": "250",
"Cache-Control": "no-store",
"pragma": "no-cache",
diff --git a/tests/Fixtures/Saloon/Languages/fetch-a-list-of-languages.json b/tests/Fixtures/Saloon/Languages/fetch-a-list-of-languages.json
index 7bcb36c..edce785 100644
--- a/tests/Fixtures/Saloon/Languages/fetch-a-list-of-languages.json
+++ b/tests/Fixtures/Saloon/Languages/fetch-a-list-of-languages.json
@@ -1,24 +1,24 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 13:33:50 GMT",
+ "Date": "Thu, 27 Nov 2025 10:40:48 GMT",
"Content-Type": "application\/json",
"Content-Length": "1067",
"Connection": "keep-alive",
+ "CF-RAY": "9a51026e2914a625-ZRH",
+ "ratelimit-reset": "12",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
"ratelimit-limit": "1000",
"ratelimit-remaining": "999",
- "x-ratelimit-remaining-minute": "999",
- "x-ratelimit-limit-minute": "1000",
- "ratelimit-reset": "10",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "alt-svc": "h3=\":443\"; ma=86400",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb496447db660e9-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "[{\"id\":1,\"name\":\"Deutsch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"de\"},{\"id\":2,\"name\":\"Franz\\u00f6sisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"fr\"},{\"id\":3,\"name\":\"Italienisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"it\"},{\"id\":4,\"name\":\"Englisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"en\"},{\"id\":5,\"name\":\"Portugiesisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"pt\"},{\"id\":6,\"name\":\"Chinesisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"zh\"},{\"id\":7,\"name\":\"Japanisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"ja\"},{\"id\":8,\"name\":\"Spanisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"es\"}]"
+ "data": "[{\"id\":1,\"name\":\"Deutsch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"de\"},{\"id\":2,\"name\":\"Franz\\u00f6sisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"fr\"},{\"id\":3,\"name\":\"Italienisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"it\"},{\"id\":4,\"name\":\"Englisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"en\"},{\"id\":5,\"name\":\"Portugiesisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"pt\"},{\"id\":6,\"name\":\"Chinesisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"zh\"},{\"id\":7,\"name\":\"Japanisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"ja\"},{\"id\":8,\"name\":\"Spanisch\",\"decimal_point\":\".\",\"thousands_separator\":\"'\",\"date_format_id\":1,\"date_format\":\"d.m.Y\",\"iso_639_1\":\"es\"}]",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/PaymentTypes/fetch-a-list-of-payment-types.json b/tests/Fixtures/Saloon/PaymentTypes/fetch-a-list-of-payment-types.json
index e1c2455..b50943f 100644
--- a/tests/Fixtures/Saloon/PaymentTypes/fetch-a-list-of-payment-types.json
+++ b/tests/Fixtures/Saloon/PaymentTypes/fetch-a-list-of-payment-types.json
@@ -1,24 +1,24 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 13:32:02 GMT",
+ "Date": "Thu, 27 Nov 2025 10:42:20 GMT",
"Content-Type": "application\/json",
"Content-Length": "208",
"Connection": "keep-alive",
- "ratelimit-remaining": "999",
- "ratelimit-reset": "58",
+ "CF-RAY": "9a5104aef858bc6b-ZRH",
+ "ratelimit-reset": "40",
"x-ratelimit-limit-minute": "1000",
"x-ratelimit-remaining-minute": "999",
"ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "alt-svc": "h3=\":443\"; ma=86400",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb4939f6b4a60ed-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "[{\"id\":1,\"name\":\"Vorauszahlung\"},{\"id\":2,\"name\":\"Barzahlung\"},{\"id\":3,\"name\":\"EC Karte\"},{\"id\":4,\"name\":\"Rechnung\"},{\"id\":5,\"name\":\"Nachnahme\"},{\"id\":6,\"name\":\"Kreditkarte\"},{\"id\":7,\"name\":\"Bankeinzug\\\/LSV\"}]"
+ "data": "[{\"id\":1,\"name\":\"Vorauszahlung\"},{\"id\":2,\"name\":\"Barzahlung\"},{\"id\":3,\"name\":\"EC Karte\"},{\"id\":4,\"name\":\"Rechnung\"},{\"id\":5,\"name\":\"Nachnahme\"},{\"id\":6,\"name\":\"Kreditkarte\"},{\"id\":7,\"name\":\"Bankeinzug\\\/LSV\"}]",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/accept-a-quote/accept-a-quote.json b/tests/Fixtures/Saloon/Quotes/accept-a-quote/accept-a-quote.json
new file mode 100644
index 0000000..2375741
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/accept-a-quote/accept-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:50 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4d10e17985f-ZRH",
+ "ratelimit-remaining": "984",
+ "ratelimit-reset": "10",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "984",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/accept-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/accept-a-quote/create-a-quote.json
new file mode 100644
index 0000000..7efe0d4
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/accept-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:50 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4cd4cd9985f-ZRH",
+ "x-ratelimit-remaining-minute": "986",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "986",
+ "ratelimit-reset": "10",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "cd7c6cf2c1affddea2f93011ccae43ed",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":25,\"document_nr\":\"AN-00025\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"91985bd0-b429-4603-ab1b-7f321fbae1ec\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:50\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":26,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"68a8fd80-db88-47ba-bd3e-316a5f7ffeef\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/accept-a-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/accept-a-quote/issue-a-quote.json
new file mode 100644
index 0000000..ffedf03
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/accept-a-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:50 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4cfdb89985f-ZRH",
+ "ratelimit-remaining": "985",
+ "ratelimit-reset": "10",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "985",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-a-quote/create-a-quote.json
new file mode 100644
index 0000000..47f808b
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:49 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4c84a86c8a4-ZRH",
+ "x-ratelimit-remaining-minute": "989",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "989",
+ "ratelimit-reset": "11",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "4002d2504eb7522492e7c8f058449d0a",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":24,\"document_nr\":\"AN-00024\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"a82af1ab-2607-4f13-9b21-8d217983cb85\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:49\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":25,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"29ccc591-712f-4081-a099-594551da4fa7\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/accept-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/accept-a-quote.json
new file mode 100644
index 0000000..3b781aa
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/accept-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:41:42 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e9389b7e343e-ZRH",
+ "ratelimit-reset": "19",
+ "x-ratelimit-remaining-minute": "996",
+ "x-ratelimit-limit-minute": "1000",
+ "ratelimit-remaining": "996",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/create-a-quote.json
new file mode 100644
index 0000000..22efcb5
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:41:41 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e9344b77343e-ZRH",
+ "ratelimit-reset": "19",
+ "x-ratelimit-remaining-minute": "999",
+ "x-ratelimit-limit-minute": "1000",
+ "ratelimit-remaining": "999",
+ "ratelimit-limit": "1000",
+ "etag": "b171d729e4705cb359ed8b2a162fba7d",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":45,\"document_nr\":\"AN-00045\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"1a56a9f3-da57-4f0e-8a7c-376759d8db63\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:41:41\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":46,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"cda74884-3512-48a1-8b07-9567762ff20a\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/create-invoice-from-quote.json b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/create-invoice-from-quote.json
new file mode 100644
index 0000000..3cd9868
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/create-invoice-from-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:41:42 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1423",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e93a1e8d343e-ZRH",
+ "x-ratelimit-remaining-minute": "995",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "995",
+ "ratelimit-reset": "18",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "295d6a296062dc20a15232d742d91704",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":1,\"document_nr\":\"RE-00001\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Vertrauen. Ihre Rechnung setzt sich wie folgt zusammen:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total_received_payments\":\"0\",\"total_credit_vouchers\":\"0\",\"total_remaining_payments\":\"100.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_to\":\"2025-12-27\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":7,\"reference\":null,\"api_reference\":null,\"viewed_by_client_at\":null,\"updated_at\":\"2025-11-28 10:41:42\",\"esr_id\":1,\"qr_invoice_id\":1,\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":47,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"cda74884-3512-48a1-8b07-9567762ff20a\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/fetch-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/fetch-a-quote.json
new file mode 100644
index 0000000..298b40b
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/fetch-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:41:41 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1519",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e93799af343e-ZRH",
+ "ratelimit-remaining": "997",
+ "ratelimit-reset": "19",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "etag": "b171d729e4705cb359ed8b2a162fba7d",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":45,\"document_nr\":\"AN-00045\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"1a56a9f3-da57-4f0e-8a7c-376759d8db63\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:41:41\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":46,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"cda74884-3512-48a1-8b07-9567762ff20a\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/issue-a-quote.json
new file mode 100644
index 0000000..d1f2133
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-invoice-from-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:41:41 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e9369835343e-ZRH",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "19",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-order-from-quote/accept-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/accept-a-quote.json
new file mode 100644
index 0000000..993d2b5
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/accept-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:43:02 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58eb31f962c115-ZRH",
+ "x-ratelimit-remaining-minute": "996",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "996",
+ "ratelimit-reset": "58",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-order-from-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/create-a-quote.json
new file mode 100644
index 0000000..e021d90
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:43:02 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58eb2dda67c115-ZRH",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "58",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "32e816695225918edcaf8350e3bd9901",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":46,\"document_nr\":\"AN-00046\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"fdbd7dca-2a68-4648-8c28-66b22e425c61\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:43:02\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":48,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"05cc84e2-f575-4751-9751-a7508cbbcf96\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-order-from-quote/create-order-from-quote.json b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/create-order-from-quote.json
new file mode 100644
index 0000000..57d439c
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/create-order-from-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:43:03 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1387",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58eb32db28c115-ZRH",
+ "ratelimit-remaining": "995",
+ "ratelimit-reset": "58",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "995",
+ "ratelimit-limit": "1000",
+ "etag": "373b0aaab9bb861d0faee048cf62424e",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":1,\"document_nr\":\"AU-00001\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihren Auftrag. Nachfolgend finden Sie Ihre Auftragsbest\\u00e4tigung.\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":5,\"is_recurring\":false,\"api_reference\":null,\"viewed_by_client_at\":null,\"updated_at\":\"2025-11-28 10:43:03\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":49,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"05cc84e2-f575-4751-9751-a7508cbbcf96\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-order-from-quote/fetch-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/fetch-a-quote.json
new file mode 100644
index 0000000..3d9b629
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/fetch-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:43:02 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1519",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58eb30ff9ec115-ZRH",
+ "ratelimit-reset": "58",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "997",
+ "etag": "32e816695225918edcaf8350e3bd9901",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":46,\"document_nr\":\"AN-00046\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"fdbd7dca-2a68-4648-8c28-66b22e425c61\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:43:02\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":48,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"05cc84e2-f575-4751-9751-a7508cbbcf96\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/create-order-from-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/issue-a-quote.json
new file mode 100644
index 0000000..f23ad7a
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/create-order-from-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:43:02 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58eb2fddb9c115-ZRH",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "58",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/decline-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/decline-a-quote/create-a-quote.json
new file mode 100644
index 0000000..9cf6e17
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/decline-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:29:36 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58d77f69f4265f-ZRH",
+ "ratelimit-reset": "25",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "etag": "a85a5d062b52a0e678c05e548ee35986",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":37,\"document_nr\":\"AN-00037\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"e8cd12cc-c830-4184-88d5-29d72a140c26\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:29:36\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":38,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"87d91093-8f79-48f8-bc75-81dc52a31921\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/decline-a-quote/decline-a-quote.json b/tests/Fixtures/Saloon/Quotes/decline-a-quote/decline-a-quote.json
new file mode 100644
index 0000000..e3053e0
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/decline-a-quote/decline-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:29:36 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58d7832abf265f-ZRH",
+ "ratelimit-remaining": "996",
+ "ratelimit-reset": "24",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "996",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/decline-a-quote/fetch-a-quote.json b/tests/Fixtures/Saloon/Quotes/decline-a-quote/fetch-a-quote.json
new file mode 100644
index 0000000..75f181c
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/decline-a-quote/fetch-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:29:36 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1519",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58d78228cb265f-ZRH",
+ "ratelimit-reset": "24",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "997",
+ "etag": "a85a5d062b52a0e678c05e548ee35986",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":37,\"document_nr\":\"AN-00037\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"e8cd12cc-c830-4184-88d5-29d72a140c26\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:29:36\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":38,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"87d91093-8f79-48f8-bc75-81dc52a31921\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/decline-a-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/decline-a-quote/issue-a-quote.json
new file mode 100644
index 0000000..41fb120
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/decline-a-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:29:36 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58d7812dfa265f-ZRH",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "24",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/delete-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/delete-a-quote/create-a-quote.json
new file mode 100644
index 0000000..431cc36
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/delete-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:35 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4720c5e0219-ZRH",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "25",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "etag": "4dc44bd70edfa8ce8b02bf83270f3899",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":21,\"document_nr\":\"AN-00021\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"de284829-20f1-453c-b98d-386e209b7db6\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:35\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":22,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"78b9bd78-6dfe-4dd5-b897-b8a371465aae\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/delete-a-quote/delete-a-quote.json b/tests/Fixtures/Saloon/Quotes/delete-a-quote/delete-a-quote.json
new file mode 100644
index 0000000..2c35351
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/delete-a-quote/delete-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:36 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4742d8a0219-ZRH",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "25",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/edit-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/edit-a-quote/create-a-quote.json
new file mode 100644
index 0000000..126f518
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/edit-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:37:49 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e38aeef0bab6-ZRH",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "11",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "etag": "648bf6edf9167dc1bb481380857a0d6b",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":44,\"document_nr\":\"AN-00044\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"29704b24-7ca7-4403-9ccc-c7ace447122c\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:37:49\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":45,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"3f7dc35d-4dfc-4196-ace3-0c6f5a4421f1\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/edit-a-quote/edit-a-quote.json b/tests/Fixtures/Saloon/Quotes/edit-a-quote/edit-a-quote.json
new file mode 100644
index 0000000..19ea9e0
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/edit-a-quote/edit-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:37:49 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1319",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58e38cc89fbab6-ZRH",
+ "ratelimit-reset": "11",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "998",
+ "etag": "648bf6edf9167dc1bb481380857a0d6b",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":44,\"document_nr\":\"AN-00044\",\"title\":\"Updated Quote Title\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"\",\"footer\":\"\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"29704b24-7ca7-4403-9ccc-c7ace447122c\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:37:49\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":45,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"3f7dc35d-4dfc-4196-ace3-0c6f5a4421f1\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/fetch-a-list-of-quotes/fetch-a-list-of-quotes.json b/tests/Fixtures/Saloon/Quotes/fetch-a-list-of-quotes/fetch-a-list-of-quotes.json
new file mode 100644
index 0000000..73c6647
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/fetch-a-list-of-quotes/fetch-a-list-of-quotes.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:51 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "7638",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4d25ca88bbd-ZRH",
+ "ratelimit-remaining": "983",
+ "ratelimit-reset": "10",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "983",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":17,\"document_nr\":\"AN-00017\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"c05f8c32-1022-41ea-ab0e-038caf7dffbd\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:54\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":18,\"document_nr\":\"AN-00018\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"680f7e8f-de9b-4004-88f3-d9046b8e1586\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:56\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":19,\"document_nr\":\"AN-00019\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"fad376bb-8443-4946-aece-89d5d0dd8c5a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:07:17\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":22,\"document_nr\":\"AN-00022\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"ba66d6b1-31c7-4091-ab18-d15cdd742c6a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":23,\"document_nr\":\"AN-00023\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"da6c76cf-cc96-489b-93b0-534b5a510b03\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":24,\"document_nr\":\"AN-00024\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"a82af1ab-2607-4f13-9b21-8d217983cb85\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:49\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":25,\"document_nr\":\"AN-00025\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":3,\"api_reference\":\"91985bd0-b429-4603-ab1b-7f321fbae1ec\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:50\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/fetch-a-quote/fetch-a-list-of-quotes.json b/tests/Fixtures/Saloon/Quotes/fetch-a-quote/fetch-a-list-of-quotes.json
new file mode 100644
index 0000000..669b7d8
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/fetch-a-quote/fetch-a-list-of-quotes.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:48 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "5456",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4c04e01bc60-ZRH",
+ "ratelimit-reset": "12",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "992",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "992",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":17,\"document_nr\":\"AN-00017\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"c05f8c32-1022-41ea-ab0e-038caf7dffbd\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:54\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":18,\"document_nr\":\"AN-00018\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"680f7e8f-de9b-4004-88f3-d9046b8e1586\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:56\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":19,\"document_nr\":\"AN-00019\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"fad376bb-8443-4946-aece-89d5d0dd8c5a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:07:17\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":22,\"document_nr\":\"AN-00022\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"ba66d6b1-31c7-4091-ab18-d15cdd742c6a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":23,\"document_nr\":\"AN-00023\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"da6c76cf-cc96-489b-93b0-534b5a510b03\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/fetch-a-quote/fetch-a-quote.json b/tests/Fixtures/Saloon/Quotes/fetch-a-quote/fetch-a-quote.json
new file mode 100644
index 0000000..4e8fd60
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/fetch-a-quote/fetch-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:48 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1519",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4c13eadbc60-ZRH",
+ "ratelimit-remaining": "991",
+ "ratelimit-reset": "12",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "991",
+ "ratelimit-limit": "1000",
+ "etag": "dae80f99415a29e15e6025f611161000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":17,\"document_nr\":\"AN-00017\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"c05f8c32-1022-41ea-ab0e-038caf7dffbd\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:54\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":18,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"6aec590c-979a-48f1-9096-c50ceb9591cf\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/issue-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/issue-a-quote/create-a-quote.json
new file mode 100644
index 0000000..ab46735
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/issue-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:46 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4b75e232397-ZRH",
+ "ratelimit-remaining": "997",
+ "ratelimit-reset": "14",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "etag": "93c3d7f96c6e18ac63066b319e28f9ad",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":22,\"document_nr\":\"AN-00022\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"ba66d6b1-31c7-4091-ab18-d15cdd742c6a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:46\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":23,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"2a2f974d-cd9b-4e01-9d9b-41c0bdd89f38\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/issue-a-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/issue-a-quote/issue-a-quote.json
new file mode 100644
index 0000000..7214d58
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/issue-a-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:47 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4b97f052397-ZRH",
+ "x-ratelimit-remaining-minute": "996",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "996",
+ "ratelimit-reset": "14",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/mark-as-sent-a-quote/fetch-a-list-of-quotes.json b/tests/Fixtures/Saloon/Quotes/mark-as-sent-a-quote/fetch-a-list-of-quotes.json
new file mode 100644
index 0000000..5bb26c0
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/mark-as-sent-a-quote/fetch-a-list-of-quotes.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:49 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "6547",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4caea01343e-ZRH",
+ "ratelimit-reset": "11",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "988",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "988",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":17,\"document_nr\":\"AN-00017\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"c05f8c32-1022-41ea-ab0e-038caf7dffbd\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:54\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":18,\"document_nr\":\"AN-00018\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"680f7e8f-de9b-4004-88f3-d9046b8e1586\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:56\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":19,\"document_nr\":\"AN-00019\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"fad376bb-8443-4946-aece-89d5d0dd8c5a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:07:17\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":22,\"document_nr\":\"AN-00022\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"ba66d6b1-31c7-4091-ab18-d15cdd742c6a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":23,\"document_nr\":\"AN-00023\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"da6c76cf-cc96-489b-93b0-534b5a510b03\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":24,\"document_nr\":\"AN-00024\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"a82af1ab-2607-4f13-9b21-8d217983cb85\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:49\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/mark-as-sent-a-quote/mark-as-sent-a-quote.json b/tests/Fixtures/Saloon/Quotes/mark-as-sent-a-quote/mark-as-sent-a-quote.json
new file mode 100644
index 0000000..bc651ae
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/mark-as-sent-a-quote/mark-as-sent-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:50 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4cbebb1343e-ZRH",
+ "x-ratelimit-remaining-minute": "987",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "987",
+ "ratelimit-reset": "11",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/reissue-a-quote/accept-a-quote.json b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/accept-a-quote.json
new file mode 100644
index 0000000..2d682d3
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/accept-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:31:29 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58da4478011a65-ZRH",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "997",
+ "ratelimit-reset": "31",
+ "x-ratelimit-limit-minute": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/reissue-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/create-a-quote.json
new file mode 100644
index 0000000..b4a4e25
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:31:28 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58da3fdfe71a65-ZRH",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "32",
+ "x-ratelimit-limit-minute": "1000",
+ "etag": "321d1412d39cdaa4f1dadf62cf1cc7a0",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":38,\"document_nr\":\"AN-00038\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"342fe679-31f3-4fac-b402-67fd49bcdd7b\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:31:28\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":39,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"b20ba576-dfcb-4d71-96bf-3d806cc6db69\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/reissue-a-quote/fetch-a-quote.json b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/fetch-a-quote.json
new file mode 100644
index 0000000..a0a9799
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/fetch-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:31:29 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1519",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58da4569c01a65-ZRH",
+ "ratelimit-reset": "31",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "996",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "996",
+ "etag": "bb72b8507124c2d03c23f32004b5527d",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":38,\"document_nr\":\"AN-00038\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":3,\"api_reference\":\"342fe679-31f3-4fac-b402-67fd49bcdd7b\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:31:29\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":39,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"b20ba576-dfcb-4d71-96bf-3d806cc6db69\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/reissue-a-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/issue-a-quote.json
new file mode 100644
index 0000000..fb56fe1
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:31:29 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58da424c601a65-ZRH",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "31",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/reissue-a-quote/reissue-a-quote.json b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/reissue-a-quote.json
new file mode 100644
index 0000000..75c517e
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/reissue-a-quote/reissue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:31:29 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58da464b8b1a65-ZRH",
+ "ratelimit-remaining": "995",
+ "ratelimit-reset": "31",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "995",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/create-a-quote.json b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/create-a-quote.json
new file mode 100644
index 0000000..5d5fd77
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/create-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 201,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:32:53 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1454",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58dc528a288bbd-ZRH",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "7",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "etag": "dd98956783436028ac3a685c2d94cf4e",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":39,\"document_nr\":\"AN-00039\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100\",\"total_net\":\"100\",\"total_taxes\":\"0.0000\",\"total\":\"100\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"7d038610-bce2-4294-8346-be7b65a6857e\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:32:53\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":40,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"amount_reserved\":null,\"amount_open\":null,\"amount_completed\":null,\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"9f2aa10c-19d4-425c-9ef4-3a5a7263f887\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/fetch-a-quote.json b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/fetch-a-quote.json
new file mode 100644
index 0000000..e04f854
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/fetch-a-quote.json
@@ -0,0 +1,25 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:33:31 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "1519",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58dd3e8f6e7dd2-ZRH",
+ "ratelimit-reset": "29",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "999",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "etag": "8a8e1bdf907993920fa38057067a8348",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"id\":39,\"document_nr\":\"AN-00039\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"7d038610-bce2-4294-8346-be7b65a6857e\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:32:54\",\"template_slug\":\"\",\"taxs\":[],\"positions\":[{\"id\":40,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"amount_reserved\":\"0.000000\",\"amount_open\":\"0.000000\",\"amount_completed\":\"0.000000\",\"unit_id\":1,\"account_id\":217,\"unit_name\":\"Stk\",\"tax_id\":14,\"tax_value\":\"8.10\",\"text\":\"9f2aa10c-19d4-425c-9ef4-3a5a7263f887\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}],\"network_link\":\"\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/issue-a-quote.json
new file mode 100644
index 0000000..83b7f60
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:32:53 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58dc547dce8bbd-ZRH",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "7",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "998",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/revert-issue-a-quote.json b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/revert-issue-a-quote.json
new file mode 100644
index 0000000..0a942b0
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/revert-issue-a-quote/revert-issue-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:32:54 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "16",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58dc556fcf8bbd-ZRH",
+ "ratelimit-reset": "6",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "997",
+ "ratelimit-limit": "1000",
+ "ratelimit-remaining": "997",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"success\":true}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/search-quotes/search-quotes.json b/tests/Fixtures/Saloon/Quotes/search-quotes/search-quotes.json
new file mode 100644
index 0000000..6e34c07
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/search-quotes/search-quotes.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:51 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "2",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4d7cd7b75ff-ZRH",
+ "x-ratelimit-remaining-minute": "249",
+ "ratelimit-limit": "250",
+ "ratelimit-remaining": "249",
+ "ratelimit-reset": "9",
+ "x-ratelimit-limit-minute": "250",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/show-pdf-a-quote/fetch-a-list-of-quotes.json b/tests/Fixtures/Saloon/Quotes/show-pdf-a-quote/fetch-a-list-of-quotes.json
new file mode 100644
index 0000000..3f1878b
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/show-pdf-a-quote/fetch-a-list-of-quotes.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:48 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "5456",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4c2e8fdc126-ZRH",
+ "ratelimit-remaining": "990",
+ "ratelimit-reset": "12",
+ "x-ratelimit-limit-minute": "1000",
+ "x-ratelimit-remaining-minute": "990",
+ "ratelimit-limit": "1000",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "[{\"id\":17,\"document_nr\":\"AN-00017\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"c05f8c32-1022-41ea-ab0e-038caf7dffbd\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:54\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":18,\"document_nr\":\"AN-00018\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"680f7e8f-de9b-4004-88f3-d9046b8e1586\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:05:56\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":19,\"document_nr\":\"AN-00019\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":1,\"api_reference\":\"fad376bb-8443-4946-aece-89d5d0dd8c5a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:07:17\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":22,\"document_nr\":\"AN-00022\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"ba66d6b1-31c7-4091-ab18-d15cdd742c6a\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"},{\"id\":23,\"document_nr\":\"AN-00023\",\"title\":\"Test Quote\",\"contact_id\":1,\"contact_sub_id\":null,\"user_id\":1,\"project_id\":null,\"logopaper_id\":1,\"language_id\":1,\"bank_account_id\":1,\"currency_id\":1,\"payment_type_id\":1,\"header\":\"Guten Tag bexio AG
Danke f\\u00fcr Ihr Interesse. Sie erhalten folgendes Angebot:\",\"footer\":\"Sie haben Fragen? Melden Sie sich bei uns.
Freundliche Gr\\u00fcsse
Max Mustermann\",\"total_gross\":\"100.000000\",\"total_net\":\"100.000000\",\"total_taxes\":\"0.0000\",\"total\":\"100.000000\",\"total_rounding_difference\":0,\"mwst_type\":1,\"mwst_is_net\":true,\"show_position_taxes\":true,\"is_valid_from\":\"2025-11-28\",\"is_valid_until\":\"2025-12-03\",\"contact_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"delivery_address_type\":0,\"delivery_address\":\"bexio AG\\nAlte Jonastrasse 24\\n8640 Rapperswil\\nSchweiz\",\"kb_item_status_id\":2,\"api_reference\":\"da6c76cf-cc96-489b-93b0-534b5a510b03\",\"viewed_by_client_at\":null,\"kb_terms_of_payment_template_id\":null,\"show_total\":true,\"updated_at\":\"2025-11-28 10:16:47\",\"template_slug\":\"\",\"taxs\":[],\"network_link\":\"\"}]",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Quotes/show-pdf-a-quote/show-pdf-a-quote.json b/tests/Fixtures/Saloon/Quotes/show-pdf-a-quote/show-pdf-a-quote.json
new file mode 100644
index 0000000..e8d2867
--- /dev/null
+++ b/tests/Fixtures/Saloon/Quotes/show-pdf-a-quote/show-pdf-a-quote.json
@@ -0,0 +1,24 @@
+{
+ "statusCode": 200,
+ "headers": {
+ "Date": "Fri, 28 Nov 2025 09:16:49 GMT",
+ "Content-Type": "application\/json",
+ "Content-Length": "59456",
+ "Connection": "keep-alive",
+ "CF-RAY": "9a58c4c40b3cc126-ZRH",
+ "ratelimit-reset": "12",
+ "x-ratelimit-limit-minute": "250",
+ "x-ratelimit-remaining-minute": "249",
+ "ratelimit-limit": "250",
+ "ratelimit-remaining": "249",
+ "Cache-Control": "no-store",
+ "pragma": "no-cache",
+ "vary": "Origin",
+ "access-control-allow-origin": "https:\/\/office.bexio.com",
+ "via": "1.1 google",
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
+ },
+ "data": "{\"name\":\"an-00017.pdf\",\"size\":43865,\"mime\":\"application\\\/pdf\",\"content\":\"JVBERi0xLjUKJeLjz9MKCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKL091dGxpbmVzIDQgMCBSPj4KZW5kb2JqCgo1IDAgb2JqCjw8L0xlbmd0aCA4IDAgUgovRmlsdGVyIC9GbGF0ZURlY29kZQovVHlwZSAvT2JqU3RtCi9OIDMKL0ZpcnN0IDE1Pj4Kc3RyZWFtCnicjY1NC4JQEEX38ytmWYuYMfW9FiJI0SrMwkUftDAYQhANHaP+fc9q4bLdvVzOuQYZLC58CNAzDFFEeamV4CSpb3JtFJN0xsyenQJlRSu1YoCMe6CVdIpnfyhIh+PJhdC6egFK5alohyWOR8p8IHZ9o\\\/KXLOSPLGvlgWYke90FadtrVdbSAa3L1rHm69kU3e8ZaNn07mDuqDfzuTsiCmVuZHN0cmVhbQplbmRvYmoKCjggMCBvYmoKMTU4CmVuZG9iagoKMiAwIG9iago8PC9UeXBlIC9QYWdlcwovS2lkcyBbMyAwIFJdCi9Db3VudCAxPj4KZW5kb2JqCgo5IDAgb2JqCjw8L0xlbmd0aCAxMCAwIFIKL0ZpbHRlciAvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJyFVttu20YQfddXzEsBGoU2e7\\\/kpZBU3xIoSCMWBRL3gZJXFmt6ZZAU7Phn\\\/KsdxlK0q9Cynnw5M3PmzJlZjfOBocRqzUAbRoyTFvLrwbszBo5Q\\\/EC+HGRz\\\/1iuYXR+Avl\\\/g9N8MI6iNCVuG5WNqtbDh3UomrYumsYDl30hihK2C7FaUvhS3N\\\/7unkoqz64cETs4LPF6sGXTxFMGkmMFAaM0UQbbV7485j\\\/dNO0vr4rQoia2OVXHR2mKEgjiLDKAiXcCgW1Hyz3KG6IFkwdR0lridSWHUcJa4iz0ryBUppwzfgbKCEIM8a+hcIpCSv7UeNYDGzTSrcTkbG9iqNw4+frFkafhvgnZnpmpYQinKJK3axy37Tw12bd+j4kQ96MyR63\\\/Vm0m7v3UQxDVZ1RLgnKuMWfsRpXEVRQQ5Ryaf7sclXDKDT3tV+s7ou6Db6O80uuiNbWpkGRaabFY08L0qExd+jz56otb2BeNr3MEyzFKvxV5gn04yZc+xA2d3evUE4Tdx\\\/WRxXHKqWlL1Q3rQ+QF8j29b2WOEm7jfiGIwm3HpbPNXRSXgYUxuN+E5iVHk4GQxwEc0pA5utVUXXpl+vqxiP3Bra2eX\\\/yL+QfDqoIp4naVjnY2c\\\/rhsRKUke4MCYJyca+WaxqX8434SbWUnXqUJmCpx6ZxBritLUTB6jTMjz5Cq1SNjHWUWKEsyn2c4eCMsDk4qxHQ4HLJrXUPR5nva1F+EwXfqEcXQydccVQ2iUbOur0cKHows8dOmWxTFrGEUhu0yTd9sKsvY07wYOBG84OgJQiNIHpjq0DoSUR2v5swqBxt01cZbiC9LerkyhOMU0Mx6zHmj8stldA4hskGevxw9jjm3ID\\\/vG2IjD9Z5b3Fo3ify2zmwvHnXHMil+pfcs6Q6+KOTr4DMv58AdMfYUr+MPpTblY4dKUPyzP8VXCi5ptAhq1x9vcWNzMlyrZWe1xkyuM93BeP+Pu9PHSeAJ2EXhzYH+CIrRjCBIcRDdcoXdSmb1Uua\\\/8ch2SQ8Q5odq4NIrFUb9LZnCH8bLIxJ2me6w6Y71ab4zXIS6GBiEGX\\\/kjxf4ez2D2ULZPvq6KcI03CK6y5brGM1d9h0ntr8sWZpsShUrsJaQjlip3hM3HdWjXZeiGmJ5MZOW0UUdYvegNF0VIdh9rYjf0mAKXk6QUDlIYyo+Umnw5nU0uvn61dBQrJzXByyuA4\\\/vcX+pyPPqUiK1xdxg1aUha60JpoBKNpSh+nxASfzUW\\\/+l2ef4HUHdS\\\/wplbmRzdHJlYW0KZW5kb2JqCgoxMCAwIG9iago5NTIKZW5kb2JqCgozIDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1BhcmVudCAyIDAgUgovTWVkaWFCb3ggWzAgMCA1OTUuMDAwMCA4NDIuMDAwMF0KL0NvbnRlbnRzIDkgMCBSCi9SZXNvdXJjZXMgPDwvRm9udCA8PC9GMSAxMSAwIFIKL0YyIDEyIDAgUj4+Ci9Qcm9jU2V0IFsvUERGIC9UZXh0XT4+Pj4KZW5kb2JqCgoxMSAwIG9iago8PC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UcnVlVHlwZQovQmFzZUZvbnQgL1BYQUFBQStBcmlhbE1UCi9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZwovRmlyc3RDaGFyIDMyCi9MYXN0Q2hhciAyNTUKL1dpZHRocyBbMjc3IDAgMCAwIDAgODg5IDAgMCAzMzMgMzMzIDAgNTgzIDAgMzMzIDI3NyAwIDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiAyNzcgMCAwIDAgMCA1NTYgMCA2NjYgNjY2IDcyMiA3MjIgNjY2IDYxMCA3NzcgNzIyIDI3NyA1MDAgNjY2IDAgODMzIDAgMCAwIDAgNzIyIDY2NiA2MTAgNzIyIDAgMCAwIDAgNjEwIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTAwIDU1NiA1NTYgMjc3IDU1NiA1NTYgMjIyIDAgNTAwIDIyMiA4MzMgNTU2IDU1NiA1NTYgMCAzMzMgNTAwIDI3NyA1NTYgMCA3MjIgNTAwIDUwMCA1MDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwXQovRm9udERlc2NyaXB0b3IgMTMgMCBSPj4KZW5kb2JqCgoxMyAwIG9iago8PC9UeXBlIC9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUgL0FyaWFsTVQKL0FzY2VudCA5MDUKL0Rlc2NlbnQgLTIxMQovSXRhbGljQW5nbGUgMAovU3RlbVYgMAovQ2FwSGVpZ2h0IDAKL0ZsYWdzIDMyCi9Gb250QkJveCBbLTY2NCAtMzI0IDIwMjggMTAzN10KL0ZvbnRGaWxlMiAxNCAwIFI+PgplbmRvYmoKCjE0IDAgb2JqCjw8L0xlbmd0aCAxNSAwIFIKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aDEgMzA4Njg+PgpzdHJlYW0KeJysfAlgVMX5+My8c9\\\/u2317H9kkb7PZzQkJJCFsDGSRS45wgwSJJCSBBHInnIKAchlR0SoKWgFFBZUSIGBAWpFSrVeh1Xq1Cm3xbKm0pbQK2f1\\\/83YTgvb3+\\\/2vbObN92bmzfHd37zZRRghZEBrEYPCVQ2VzYciT\\\/8FSt5GCFuqlrar25p\\\/sxTg8wjxuQuaFzYsS9v3T4REBSGuc2H9igWL7xrdiJB8EqGbB9XWVFa\\\/GbqyFaHJl6GPIbVQYGkwQN2UbLhPrW1oXy43u3VwPwXu\\\/13fVFWJhFGDEZp6C9xfa6hc3sxeMPwIoWmj4F5trGyoeRUvLIb7aoQS5OamtvZoJtqGUEM7rW9urWn+8\\\/6WP8L9wwhJPVCGEV0PXRHCPPof\\\/7TGBCGGRRziBSTqJL1BNpoUs4XWWJHN7nC63J4Eb2ISSqZFqi\\\/FT\\\/PUWAeBYFp6RmZW9gA0MCd30OA8lF8wpBANDRXd9D8PjlDx\\\/06jfjP9v\\\/jjjiM3JA\\\/3HHKzQeRCKPoFpC9pHqmLfknraU6+hsbd8YTQXrQf16H96BV0Cl+Cpw6gY6gL\\\/RI50Sj0BFqFHkabEI\\\/mQMk9aBp8OCh\\\/GLujXSgH7QZe2o3egba3ojvRceTAruhXaA3awLwLT21AMkpBI9AU1ITuwxOjS9BcdI69GxWiiagRNeO10dnR+6MPRfegZ9Ax5pfRHqRHHlQFn3eif+U+jP4eDYAnHkHb0Tn8kO4ICsMoa6Hlj1Er2sGUszi6MPodzMCHlsEcWFSK3sEnSRb0XoO+wC68ihkJvTwd7YyehlZeVI5q0Q50HBfgscTHzY2WRt9BDhhjOfS6HR1CR+HTjX6KPsYG7lJ0T\\\/QScqNsNA7W04V+hU8ykZ51kRKKaMBSBgpBTRP6GXodncV+\\\/Cpp4gzcYC7MrYy+h2xoEJoJs30Onvwc\\\/4vcCZ81zGvsmOjNyAh4eZBiG\\\/0C\\\/QF7cA6ejGeRDNJEnmRakQgjDoJPNaoDfD8GvX+Ks\\\/BRYiBnmKfZF9irfGLkfNQIFAmix9GP0atYhpWquA3fhd\\\/HfyIjyTzyOPkj8zC7j\\\/2NUAmrvh01oPvQC+hf2IKH4qn4NlyLV+FN+EG8Hb+Dz+IvyQgygywm3zC1TAvzU\\\/Zm+Exn29i7uY3cvfyXkdmR05FfR\\\/4VHRzdiKYCP6yD2T+CnoSVHUNn0EfwOYf+iDmsx0b4qNiHZ+I74HMnvg8\\\/hffifbgLRjmL\\\/4i\\\/wn\\\/H\\\/8RXCYgh4UkC8ZEU+PhJK1lGHiZPkDPwOUv+Qr5lnEwKk8UUMMVMGdMEs9rEbIXPEeYPrIc9w0YBz4O5bdxObi\\\/3AneKu8QbhLtEJL597emezJ5PIyiyObItcijSFf0DsgMNPYCFZJDAqagSPouA3tuA4w6gd7EBcOfBmXg4ngiYmYcX4Ra8HDC5Hu\\\/Az2hz\\\/wk+AVj6AH8Dc5aJV5vzQFJAbiaT4XM7qSEtZCt5iHSR98l3jMDoGRNjZzKZsUw5U8O0MyuYbUwn8zbzCfNH5gpzDT5RVmKT2RQ2yGaxY9l57BL2SfYL9gtuLvcW9xkv8Q38Rr6b\\\/5swRBguTBGmCuXCA8JR4T2xArjz5+gIeukGXXGeWceMZo6g+0ke6ya\\\/Ir8Cfp6HqplSApxK9uLNZDXuIqnccv4mchOehC6xQcD1a2QnuUJuYkrxBDwdLSKDYr3xNvZ5qqvYn6OL7AlY26+g5+W8Ad9JvuEN6BBGJARj\\\/oLJZbOYt9DHzDkssLvR71gJO\\\/FF8hwzBbjgp+xwbjbyMU+gnzAteDU6QkaDxr4qbgE+noSfB70wAw\\\/G\\\/2aiiCGTgIsKmT+hu9Fi8iG6CHK8GT2Kq9mF6H6Uh1ehL9CzIBUZXCOfydvxG6SO7SBW3IUIuw9WF8KpmOFsaD0uZ3bw35CP0BJ0hpXQp8yLMPsz5CdMKXuJm4ZrQQJWo42oJboOreBms7\\\/BCxGDZ6EAex602ypmMOuDfA1olbmg046CdB8HPTCCKYUSF3DOROCLmaAhdsDnMdATLHBQHcj4raDFfoW6+BmkGy3kjBi0DkLsW5FpaE70WbQ9uhA1Rh9CA0AfbIqugh73os\\\/QA2gv3hC5AzWjJJCcT\\\/FEbgw5w42JDiAd5CMynWy7kb6A7QB2oa\\\/h8xM0Bg3nXkYd7AdoOiqJbon+Frg7HTTsdjQfjUcXYJV\\\/hRFuYU6ivMgkcjA6hmmG9Z5DU6PPRZOxhGqj9WgyOoGeEThUKWSFR4wIlwwfVnxTUWhoYUF+3uBBuTkDB2RnZWakpwUDqf4Un5qclOhN8LhdTofdZrWYFZNRNuglnSjwHMsQjLJH+8dUqJ3Bik426L\\\/llgH03l8JBZX9Cio6VSgac2ObTrVCa6be2DIMLRd8r2U41jLc1xIrajEqHpCtjvarne+M8qvdeM7U2QDfN8pfpnZe1OBSDd6qwTLAPh88oI521Y5SO3GFOrpzzNLajtEVo6C7g3pppH9kjTQgGx2U9ADqAep0+psPYudwrAHEObroIEGiDJPq9PhHje50+0fRGXQygdGV1Z1Tps4ePSrB5ysbkN2JR1b553ci\\\/82dpiytCRqpDdPJj+wUtGHUOroadK96MPtkx5ZuBc2vyDJU+6sr587uZCrL6BjmLBh3VKdz5QXX9Vvo3DJy9qb+tQlMx2hXnUpvOzo2qZ27ps7uX+uj17Iy6AOeJYExFR1jYOgtgMQJ01UYjWwom92JN8CQKl0JXVVsfTX+0bSkYpHaqfPf7K\\\/tWFQBpPF0dKJpK3yHPJ7wseh55BmtdsyY7fd1liT4yypHeQ\\\/aUMe0FYfdYdV9Y82A7IOKOYbYg0ZTHDDI\\\/YGavjoN0ppTaMK0PsxiOiP\\\/OGCITrVKhZnM9sOahtJLzVDUUTUUmsFfGYanOquBInWdupEVHUoRLafPd3IBxa92\\\/BMBB\\\/gv\\\/uXGksp4CR9Q\\\/okoSPmkj9WgvhfuzMrqzMykLCKMBJrCHIdr9wUDspd2E7+\\\/WVEhA\\\/ShKYDbyrKiHEC\\\/z0cJfG93GM2Hm861U2fH7lU0P+EQCudklXWSClpzsrfGPpPWrO2t6Xu8wg+c3KV5ifZOMdj3b1Ic1tG1RZ3Y8d9U18TqJ0z3T5g6Z7Y6uqMijtsJM264i9UP7auLQ53WkbOZBBKHSAKj1QJTzu1rTG9mGzrZAPzzGlNXdwsicKVWgtUxnUrFLbFrmeTz\\\/W8+1B29RJ\\\/SsuuPxafZWZR14\\\/1NN9zfMD1DBwMTBiM4Ycacjg7phjpgtdiA4+IZcDyaMdunjuxEM0EyA\\\/DfHT05lKayhM4woGwkbQD8FyuK397QMCEOl8Ef5c4B2WNA0XV0jPGrYzoqOiq7o2vn+1XF33GMnCKnOppHV\\\/QyTnf0+L0JnWO2lAGuanHRAESw5nxyEMQgAd3cRfAFXugm28NWxLEXGCQJ7AWM3CLPXSDMCTDqOnDxBiJXlnKluKd4knK5uLSnGJUArFyDy6Bcn9lnDsAFg0m7pjInr4U5dBWp7Ek6zLLom\\\/xO7l3wyZ0oAaWBPRbC0lb3Vg+pFT0JCd1kR9jkcttcLrcrwW5yewZlWU6QnTBmDTKQnWE943G7GZzgcgXSaXkylA8kOw8F9N4TZAfKgrUMIjsOp7xYwNN7O9yboEudCqy7JP\\\/WOXTW5RcvX1SuwAWVXOy5qBQrxSWQFICx2RIK0bRpYNZq5fSgXNfIFeFpOC8jKSsZ5amDkvGAIEA5qQDJxJSMnKw9GZslgKwiQJmJ6cl4sA8u2WkDk1GuHy5GbEjGDg4uit6SjGwCXFBW\\\/A\\\/3AutwuTV\\\/SN5gsIi8PyWIU3i7zZE3eEhBfpDBeRj\\\/F3XLntzWceSljRsO4tDIsjk3j4LEpDx07Q\\\/4sycfhYpNUFFEC0eXzWHn\\\/Pj3v3jl+Buv4V+0P35fW\\\/uO+9u+a+N13\\\/4L3\\\/\\\/k72jF6\\\/h0++Nb2mkFIGtVZCqpADopaFhYSjNhpFgEUVG6cd5htNMoQh42CzuNtyNGYVSGYV40\\\/3iLhtyeKxS5wA8lwAq4HAeJOb9wSGEeL8DHrmB87pFflc45sW5F2jA\\\/rD8y9QT+Nzb+9eOeq2fLOra9\\\/NNIckT93viGdJKuEJ2kYGTR0RlIOxlMZ2BCO5nbTcZkIzG+aPnP41v9yJyfFoRPngP8DYX0rAOkpwxLW7nuxJzSM5Gp+Dz+w4lj2zrm\\\/OZqz8d\\\/jfw9IsLoreCpFrFHgUuHhpNRo458KzKNnMDrGiVW+pbDjSXgphPiNlCOAhEoL71cfLFYuVBcjHIugxBcHpQbMPsKfOY8s8\\\/uMxMcacEPPI8fiLRcxA\\\/tpfneSCOMMwJ3k0WkASQvO+xuJs0MKcWlhGA\\\/Ih6uGRq42eb76AgXypXPUU7pxUG5qAUWVeCzjyAZuPvIERrYH4fLJohVGRQIu0gxkkjxPAgi10Awwu6C+l3s7sc03JRTlh+Um1eQZz\\\/+zjvv0J2LmdEvWDN3EvCciI508apb8YI6PERU\\\/c\\\/AFDsgWSCZoufD81l+E9ms32x6w8jpBL2LjLZOtI93j0yYYZ1rn+uelrBYWKyvstbbF7srElaQZfxS\\\/UrTJv4xYZvyhutj8j7\\\/vv53Jo8nieVsSbLsbNOFff78XB1GOkVHdFuTzW0INFrYCKUqBOUEbU16\\\/V5t2llA0fKWLDp5On1c3gJB91D6hyFZFQsVDocFiAvykRa0KlQ6zErQnyLwMxe\\\/u2vpofabF727+70VDx7bt2rVvn13rhpfTt7FLB724rzDkejHkUjk5\\\/sfewn\\\/OPLoN5cgjl3017qNFK\\\/nAEFXATcSagurTFg25y9m15AHyHaRfZHFOsRzhNFx2EDwm5I2dwtdEcKUfz0GLiyb8rneJeVyWIUwnnBu\\\/XFcjDegGFVbsrK0tcV0aIkzhM0hukJUnuXzm3leKBgCskOudo14d8ajf8xpZ+8Yvir5J2PfnEfnVwxxgQDzS0JfhIfcxN3Ev8y9wr8svC6+4RXGGcoMM4yLDdXGlZaV1nssJyyfeT5LuOQxvKJ\\\/yUoSFK+SqCQp\\\/M+il5AABBYh10UvhT1JkiLy\\\/Jtej83r9YheD4OJ6PEycpLSTfYcnmzG5m7sOiIn2TiU1E1eDpswMUhtzndhPpSe+GWyDqlIwUPDBvOREjKPNJE1hCXHSSro6gcOxghK9W9WsUI1MAgLaOHyC2YLXTtcNhkHZhlB+VJdDNzeS+WhqByXtwbsvmAhYGQIVX7+FF5IGxJXjKBceIEVrhUSZ+DpHd\\\/s3X7HXU\\\/gY9Z\\\/\\\/\\\/rdK7c8d+qpuUn7948orjp55+nPFiz+0RMd1jMffb1\\\/9vMn9myuHASYnBX9nHUAJrPQu+F0TnbIo+WNMjvafKt5aQIzzVGvLLJVO5bIK2wb5Q7bPQnPyBKnMt0gFHq628cK2C8bMEVQGDp7GdONHBkXdBkMdtZ1nOxBblIbTrUneTk2KUO2tM1Tm1SirhXagpoMBDEKKkES3DrA1Y2HHnK\\\/i4\\\/joQgB5+ivC0N2N37oYK88XI5LxOXymFD0AP5CORcVDZExPAIXAeaAkXCLtdARtxcgEYV9YC\\\/2KPoEekVgXWZ1JT+yeM2Bp1bnTbRZ9G3dGxfVbbF1+b7+yfI3Fy+ovmtr5Mv3X43iu13bN3XetWq37UmyfHXVXevXq0deX3ioet4TA5N+ev\\\/JyD8\\\/hxl7gDsV7jhIj4wuh4dYZhtqDTsM+wxvGLiJzET5YZaxAG8hA88InKRnBGQwyPKbDGtjGJaRETHIrMC8TF5GIrgou8ISYllogt6U2G6y4CWOk8KJyflSNy4My0I4xZ8vrPUVCFtNhEqcLNvyEVGIShhyxNiNt2iY+0s5YC8r6zKw3ueKJm\\\/gvFwpNodCOG70WWA8k8kEuAPP8RiSo58esoTk7uh7YX1eiEkZEGLYxMRiarDLALPQJmwzhPUhw9opIUM4GDKkeCEfENJMehm4QAU4z5xn95sZMybbetaTH\\\/\\\/otde6IgV43jPM0Wvjn4nsBtF4pGcxMA3Vwz7uWZDlr8OJEzwrEjsSt1mfs\\\/7c8L7hdwmizuoyZnoYXS6Xqz8O4soA6ylWyW6xWt80mmxGq81okoH\\\/wlajlGQPG3eBRTSawnZst3stIKYvmVj8LuVNEN6wn03yyuZ5SpOyRnlAYRXgQ5fGhy6MXIqLuLaqlhO4AJnwI8DFQw8Zj\\\/wnfky+kR+vc2Qx0gS65CJwZLkZknJRubBJHJjFAXKRJtWaQOOW8v6MCdxoBVvJAEciu02gns7Mn9q319\\\/VtX\\\/LrVvS991PPup5afL6B09isf2+y7\\\/swWuVjntPP7Xj0OQSB\\\/nbi5GlcyNXfv36g4fOU6tWCti0gzwnokx0KJy22I1HCWH7KPcodY5lhrqYqRaqxUWWarVdXOLdIG70vi++5zALINBdaapf9VHJNqcnheUpMgFWSsDvzqO4AyHWcUkJXEqSTQb\\\/Y2jYjo4E2hQNd+CbKIpClK3ZEkVWEg6FpRLnPGeTc42TdXaT1MNZcWt2sRdTcdHVRDan\\\/GIvWqjICuCwUOvFC1RCLVS\\\/+VOQWSmk8opt\\\/bDGXD3syh63eNaImfPJiBMLu3qWnV3\\\/h8iFH9\\\/z5f5Pegon3z+pdc9Td6x8np1uXJRbmjv8r7+vqoj86zcdF+\\\/EE\\\/AqvO\\\/VvaeufVL+fFn3k48dOEBtSiVIrYN7DmS2OWw8LWMW\\\/onI6kAiqbrPJZjVGeQ2hiF02ZM1Bc8Qj0ls0\\\/0ZTcbz8DzClEDWhNeAgXUb41xCfaSW4tLLFycpV6i1U2DxVPeHzKGYoqfcAF4Njxhe8A+xWAormSNbIhcnDDEdY+76xz3sd\\\/u3PBKxRK52\\\/24\\\/\\\/hq\\\/\\\/gSNVqYDld1AZSfyo1x0LlxY4MAZjnGOccHPDV\\\/lcrpcvBqtxqvYdrFF32pYIq903os68BZ2o7hOv96wUb7P+bb5NaslBch9yKt6aKaqOTQboAYpDyRlqAaU5EKGhKSBuwbigRZfEs+lJ1nkpLZXdFjXTRaGlaw2U1gFBgAX2aSYiKkbP3h0sKutk8EM1B9KbbP3eTX2sJ3Ytw7q82pAe1O0XFfjllB5zsW4NoqzQ4wlWlvA7QsGC3rDgF51jaDEauvHDf1ZAy9qrv\\\/8lZNfL27YdF\\\/kykcfRa48OH\\\/j4toN9yxYuLlo3Nbp6\\\/buv2vNc0xCxmOLdn18bteCRzOyT28+EUUYn3zgVTyjdv3d86o2rb8WLd06+dm1dz2\\\/N+4tujWPIxP9LJxf5JnoCPtvc9zqX8DUOxo8C\\\/0rPauTtnjuTdrh2Oc54fna8bl6RbUOczzp2O9gijKqeZJG1ZcfcOvyqbyanjTZOI\\\/qKi\\\/IFIffnRITsy6qoZKP4xDSg5SZv6edsqnsdVHRM\\\/eh1hw2E\\\/PWrNe\\\/byAv9ldGvSKGyqkPreme4aQgP40KF+QIcGsxa05kEGsYjMVZzfsdqyqnr54yBA95ueHoNSy89sDFO1b+7akXPyZvPdO+\\\/NC+Vat34+nKysaJaz5sNrhmLcbih+ewsiPyJ4gmvogc\\\/skrTP7jR08\\\/sYVKGEHHQMw2skEt2h4aVln63lBH+GKWKcY8C757DipBhPqQu0XNbwcWodJyUYnFpxpvWMGFZyAdAzeeKXvnnWvPgTtP0ByQXgNETUkoBa0P5wAlEsgqz6oEMt9Tk0AWGyqNZA64hWSIcZSRJLhFgUVKmtmM5AwbTgLMHwj7fSm+4mQpuTglRS32+ZLQ7UmN0u3ORanK7So4f4v8vTG0FkHTsLlY6QEkFytXijUsXzBrvkc5\\\/KFyCP8KaPRH0Xzd42ApBxuJQBeAP8RJjkGpLw\\\/ds6xth+uY+19vfYDRnLtnD\\\/GQ7ndwXaplUWnRTVnPzC+q27l1u+Odj79+tuKp9knjK+ojj9IVR3sQ4srAyxAg0E4KV+UoucpCsVZXoWxmtipvcK\\\/xJ5VLil7kyvAsMkWp1Xcq\\\/zD8Q\\\/6HUccaWJk1MnpJx7EsOHEiLwgGgEXeIGCEVMFggwLCMCprsEELXRLHiUk8w3eT5rAOiYavwgQTchzrQWD0YYtBRTUCM20Ke4Y9xzJbWcx2YxzWTzGcFM4ZmK0GbKD3ikk4I5A1wlqBCD8yvf9BjLxuSPDvAhJ73Aowrauk2HOx5IKG3YubOG03YtNAV1bcLwatGdqknD5tPH16ExfLAeUTOvXTJ3QmTZ0zu4s1MaJwHHx6FP035fgy3NpS7sd52M\\\/4GKuPCabxAkPyfk1mf\\\/JCz+O7P8J\\\/2z4mxZvHHf9uDD4RGUXm4G3Hlt13L\\\/DoNuCorwC\\\/Zs2WrgtPYdkx\\\/ln+Bf423XodX+dZwjXr2vR3c3fr+TSHjnGlZSY5EnU6qyUpMzMjA3kTkwBLyUlJZiS6gvyMQNDgyU5MUrUYqTzrprkaM2n7SFdKL\\\/YGBJCAk4CxikM5Zrohg2MOLXAUBNT9PFYj8WPf4Fg4EPSDwzU4xmoAbyPBvW+1LVi44YFb1766JfIjPGzd0PETxtz1ZOR3uOH24Mg5RTMe2RLZzx0vO1Zz+7N5aSfWLjxYMYiZZnYsKB3XlHF1l2AYunjMtBWDqFVcEP2CWwpylYi6wxVVZFEiyOdguQo1o\\\/bEtWh94la0g3uBeUY+xnTJr8tn0YXEfySajZZEc2Iik8mnmzO9avJYeZbtVvssdy23OPEOy72WHcx24w7vXryH7DX\\\/1mhFNuRRbIqHBQf200PpIUx1W1p6SDEhzCZYkwxMQhKrU4Km8SioYow9yc6gKmLRnVQ1N74HQY1reWmvYxGTw6yschou41bs5Fl\\\/Sipgx5IKIugUglQgid1moTqO7To1LPLzzy5GPnj8AB556vc4+6ZX8k79aN+f5jZ8vvHpPxIy6Jurr+LG33yGZx48\\\/9aAXQ89FfnmwZcjX3WcAK3zJMjgHOARE+BnfTioJuORYozwZiXJhESYKFhLT3KiEqd70nW6U1XSR\\\/RBuSNXhIcwCYLIi5zIiizvdnlchNdLBkmWGN7usDmsDoZPYJw+bDHCxSV6fdghmX1I20zLhL91WGMSp8PpAMeJAIsEfIPjISN4Vb4n8bcvzLmzrL1t0soH39kQOYhDDz4zaHTpo\\\/WT9kfe5o7bEyfOj5w5\\\/Vwksq9y8P4hg0Z\\\/9ezn\\\/8pMolzwFMgCPe+gR7eF7TyXJIqCgBiWLlTSJemRKFCaeRVLvjCDGa9Kqkwkj8zq4qs23HRbjFA02NdIdflC1vcZflBubMsolp5iU689yWRd+y2znju+P1LyYkTeT2eyF2ayAWaiQxPCmdpMHhBw32RgIk9AfKknxKPvG126ae73Rr8Qc8GoZfz+yHuZT659Rjp7ptBRi\\\/b3LIAeGkAGjoEMBNCH4dEJtgQ7qUjDt4tWbGFSU5HP4iQBBKNj3plkZMBR0mEcTAukqqBBiZpWAV5i69o0nJYYVCUsuYNVt\\\/VybalSDqxQClOgjnDcEcop1m5j0WyIeojAGqNYf4LX43V7Gd4QVAL2YHJQDLBBf8AlJ\\\/qQw2T1QWObVRXgLoUL+LBXDzxiM8MlSefzoVQGLii+8Uo3fnu3X7Mo14CUFATMN0iJwykMJCAmdOvSZmFBUArNzETS8EDk7K4PIzu7DuMpv9uJ8UPBA775R5s2nFrmG7oJkwfvvDSclLyIe863th3Dt3\\\/4Pm7rWtj9cG7z2tKp6ydv3nk68u+1lYXYTCm5B2QnReOpWhpvgshb7fksk6STdklnJSJxhOhFEAZVEPjytTKWiT5GUMpqdmgLfKXKWIVQpUJultmbylxZ5S0Q5mrCVX6lWAt0gcPAtdQkDGfl0V1JSH647jlFvjt1qofnjvc8S+Z8N4Yc7imFzl+Bqa2DWTHo4SOUnwjdxzo8dJi2n3U4Lz+WD8iN5ekZsdwfiOWJSbHc5Yntf+XISr7KbeUOcMALYFsfQLtQJ2JzIJCcgs6hS4izqFC4FYZ7in2\\\/TFMNEFsfWguWtbyspbW4p7yXTjRop4yaZ37lFLVWMNfC6BdMpWahSsNKDVnIt5Ml\\\/GZ5s5nXEfAUPWEfm2TS6YKSJAb15aoVq9awdYq1wspacRBNsBzVBryolLdcodYW+O8iDIF6g9MhBTCYFn8FbzogNFeNW5R+quzVu159B+9y7V01su1O5u\\\/X3N1vLvqUUhOsJTeNUhNvCA9iUgpDoq4oTSrgh0hjpVuZjcwHjLBU+oj5SGLSuS1sB\\\/c8+7XISSwuYN9niY6GHDqLL59R6QXMwGFDyEJLD8O9GM9Zmidq+cnDFgct\\\/zQ8zA0jBQLDRJ3bPQy4VSfpRIljWFblJBvHwR0wEA8ODS9JiCMsJoJeRKLEED1GbDcpCptyObyL6+ROcuc5lhsv0jJ9roBVcFU6BUboJhvDer0aV2R7Nb8FPOuWi9Q7paJUTNmsuJgmkF7qs9BdPMhd2q6KICrFYjH4KC7wURLARzmG2OiHQ8s0E6X90d0Usy4FVpLtDrE0pSSEgH8+PeoA0BHi6UL1lpCYYguxYVuILvxIAEB7KOv6XxkVb9zSWo5agGkoo2Afhn\\\/BvO0U+RALPdvJXVHUc+UScHwG+aDnJ9ceI59\\\/HWEp9R5DiDcB9RS8JLwGEZNoIwkiu9Sw0fBLA6MzjDOMMzEZbEDONs5mbmOXysuNm2RRTzgxJA8xTiYTmFFCWCyVbzZKj5HtzDZhm7iXeU7gLcRkNOZyBAhBRIMs53IigKJhmmkaDoMLKdJDg3pZNhoVJOpIhWWthViOk71IxoMOcarYjQeFJYNOUsOGNXqsP05mga+rhxrSDY6nDgJP1dSsYKWbzHpJ5Sq4tRzDdZO9h81UF7iBTqDzXaAMNN8SYE\\\/fzYVy8DSBYkq\\\/jwf8T0q9Tas1jxMyEIbrruVPkSF6FYnR98H3fl\\\/zLCd0GqAuXSOpHP33QaNES+P7Z+8d9YWM2T5tD+1oYcg4uFADjwyA0vg+WVYZ+KZALc1sY4dzSCH2gW7Cfmx+DKfi23Id7gI8D3MvR2YdiMzmjl\\\/9+4O3THmcufbdGPatqwXs+asqjap2g+SBM4dcKAVPDJsseiO2DPHOSV4gNiSzlu7oHw9bPPmQXzqckpZvpveJaflKPDfFc6j\\\/8HBiMFYP7ZV4TuvDbQAEjOO949Xp+rneBm+rbrlxhWmDtNn0qLzP1G360viFSTEaDKrZZDObTWaTQWdJID6PQ+IhqpQNnEunczg97iSnE\\\/lSNDvtcplMRjEpaHyCL1dTm1PXpjKpKa64wfZTKes12KDJ3Rdc1FOKva\\\/UzDYUg4OsbZzH9s057aUl7tOWWbE9SkkMm0ImpchsKaLoxi0acYwgTh53yAwSZ4FkDHtDCoiWkpIMqU+myvo53OBSWf3MQAJelN8MxbFdeN9u0nH67ZVvvluaPnNi9PKpmY23DvBN+APevWHbpEefjuRyxyf\\\/csUT7ycGUictibTgQeu3DNULPUuYvMIVY2u19yxzo1+wfwbPIhdFwk9UMVVsG9POsoG0AibkHcmMEyYmjk4elTombTpTJsxNvDX9HqsxXQ6mklQmLTDElO8fFRidM0ed5Z8ZqNcvkhcbF9hqXCv0K+WVptXKktS2wEamQ3+P3GG6T9mQenfgIXmbaZs9KZBqlPWcD\\\/zUBFHgWYbwOJCaAmXgTiUMeMCDPRcdaICCVTwFV+BmvBXzYE06w4EBSUkOhksaoEsIesbrgigDZ3gG+4IWHLTMoIRzD+pzbS5AQHeDT0436CFdphv0QDMaysVCG21LosVamETyBsc91dQ0bcNH26GPe+t2m9PBOjVqgD1KDc59SZ73y9VNz0+fMvemSP3UuoV3\\\/v3hp7\\\/dyB037d\\\/XuTs0FH80e+3KjVd\\\/\\\/HrkH9vxB0rjfbfe3DZq9EK\\\/szKr8Omapler695eZ7z3\\\/nW3Tc7LW5x+05GlS860tX8Fa8gF\\\/\\\/K4FlVPDsscSQL0IO14lq6btB1WY8HtS7yKSQ7d58L4CI45JVArHt0ec+4p6yo9F8o\\\/pywb8zW1wwEF2itRaySR7YgkcPL+\\\/d\\\/9g3LBbvAvqSdkQy1hKWiazc4W3xBZB3UgHODn5LM3iWPY8eJS07PclybBgIiZbkh6eZ0tSMpVB1YdUxykwtHsWOtgHLLmZdJndfCsVG6nuhBoklVO3U0w9aUaQbRXxCAlGEw8iTl+1Nprht\\\/MVpyqjlx971eR75pPjd2\\\/+v2j3PFrBz+JXHv6fix\\\/xUy+duiVI\\\/NPYRudewbgqxPmbkCfH7QY6bBFsjn\\\/FjxWvEXHSKJeR15gMQPOMauTWFGSgmDA0yX8LcxRxawNyqV0vTcf04tIlRDkYOA\\\/DFtpKTzCJQk80UtJBjDaL+MjMCSLj4QTkJArhkUijjeUgGXwGDHi+KnILVMSwGpLLwPmKQMWl15uKVYuKNf6wo1ic0gzvFTVl7dQNW8Eaw3pNG7VdmM1e6wjKb4QdvlCOmps3SECiiKmFQrwkEJKSSz47Bnkmym3XPsV67n2Rhmzt4t5oXr8\\\/v3XhIX7QS+Pj37JetnhKB0V4sTw\\\/TpZl+mWPZkZcmYmWE17YUJR5rjMcrk8c5Fcl1mR2yFvzNjheNyzT7Y\\\/634+\\\/aj75fTT7jPpv7F\\\/ki6OcuBkZ7IrKzszP8SGssext2TPEsuyFoh1WUsNmwxvGL6Vv80yF+YbMavkpOY7B\\\/tsrnkZTRkkw5tjLDE+YNxpjBq5ncYDxm+MjNHoZZzd5Pmww\\\/WIzesV0Og0abCX0WdUKpUo4EvtJreFlbQwfTGnBnODB4JccFCIEjY5yZ+fGzoZIrtCOOQMuFJyUl\\\/hz\\\/AkmS\\\/hCT9oKN13pDtjgFR60qS457PPKKdd6H1JB7UtscCm9z0dfUUHBjCg+ZhU4gu1T0F+WmzLbDjRVIDDbrc5nP4gQ\\\/fOYjuT0Igprj626MCJsW23FCz+eCHOG715zYrETlfj2Xs2Pz9F0TlTTnid8083zR3cUFf7VDDx7pljXtgwad0km1H2pAakxgHDylpcLfdOCFeOH7j80tUNw4biT9K9Snppzi0Vt00etgwouBEomEy9Ioju3w+\\\/iDmDKZUr4EZzXElyZzJJTk7x5nlv9jYnb03mi6zFjmLPRMdET7lYLs82lTtu9ywS6+VaU6Oj0XMy+SPDx86P3X+0\\\/sX5F\\\/efEs8nR5PdKpdjyrHlciWmMDfRNIVbwH2c+E\\\/2O8Wg2I0sT1CClxewZPca9a7Us3qs6MP6Cv1aPatvx+Y8lMcECDmJQTvvwp34EmaTcQmejBnsThpbGH\\\/t0Epjy8tU77ZoQg\\\/\\\/2qaShnmoRi0+P0g9KNokYleQPyWNAT17fRt9wHNdrQfnH2gJR\\\/7+0xOLSf7MB5e++MySpS+CB\\\/nPByY\\\/8GZb5JvI+z\\\/G216Zee87b5197R0QzinRL5mLwPUe9E54rM6Ak70jrSOd063TnRXWCufj5HFmh7xH2eMxiLJbWkTqmEXcEkOzvFZ+1nBEd1Q6YjA4wOv8E2GMKfNMTaY1JsaEKbOOy9VipgrUDNHSLnQeYicdMpn0oH4sXr3g8rJ6rwmbUo0pCTCLVH1WMsYQROFxXnvqGQEnCyUCEQYl5J\\\/WNHQL3SRvjR9vO4YwPU92sfXyxdbeGNwcylHAYJVf6DVQ2Bl7EZWvHbnos0oUWUzxwcRvfvJx5F+tX92z\\\/\\\/fJB9xr5mx+fs\\\/6RffjDc6XzuBELL2IyboDuxMW1\\\/\\\/83fdP3QWcNQawdC6+t\\\/h++AWJsHJAzpdHyVyBrcB7K5khTbNN9y4k1VyNrspW4T2Z\\\/B73W+sn7s+sn9m+cf7Z\\\/ZnGQY7k5CwPZbsJHsqDELCnygMdRaRAnkBGy2Ns47y3SrPkhfJn\\\/BeO7\\\/Blo4LtjFGvmICz9IIZAWsxelceRgGzKaAoZ81YMYfNFea1Ztbcbkl9RTgjnBOiAktxNxkCIXdS\\\/pQ4Y5XSAAhcaQixL2jWhKbrrEWF2ldAhRqkOoYwGo70f10ztOb0mt8uWfTe3RXbcg73qC8uWfrM3juW79745JarT+\\\/ETMfUEcQIQbnl7Tdffe3jt08DziaANCYBZ9kBZ5+Gq5OR105mMuVcuW6mvoZZzDXpavSiAiGMQtIsH3Hf2a54hEGWIvcg7whLqWeEd6plrnuat9LS4Kn0LueX26+QKy4FObBJdjqnOKj5ZBxe01Zll0IUhU3wSgKijKfDj1iBuZxhWbOpaZn5nTKWPck0CA0E82keTqSaMRknO\\\/KUVCGcmpnfD2VxWcwq7bkwSWnJyrrSkqVZ4J74q5ninpbi+NuN2D4vhHC9zKagvMHIbBN8mlnGPu3dKM\\\/cfjz7r8e+inyDbb\\\/\\\/LTbia19KhzZUben5mEw1DJ11z6p9eJbz6S6cDLrAgNMjn0a+VdQDx2vxIxtH1j5LbbYVwoa14HU60eFwkk2HTe4cd6477G52P254Qt4nix45Xe50n3Szbrq6dE9yfqIoMwaTV8J2kmWzsgyPpJ02bItaw6wzwCKGPIS1jZnDg4bmaxs0kjc5fyuM9bTLfQIfRz50BUvIBcsHFx38I7DO4CFeLKfOUbF2EiZkju102RQzrxN4EUyKAmEEMvOmBJyFszLXrcNZwFiteWZ\\\/QR59twJ8BXJIxdBOTxoc2rnT6rl76cS5CUMHTxt15gyzY0vL4vwxt1p+LI2pmL\\\/l2gLgoZsjU5mvgYfoW7xL4Qq9nrNl6wO2ifrRNl6X6E7M1gdt2f6QfohtvH6MbZYwW1+r\\\/076p9040J+dNtw\\\/PG1i2tbsXdnCEN+QjJLsMfoxvtEZM3wzMuqEKl9VRkX22uyP0770\\\/dX\\\/TZrZ6eDt3eRgV7rXKmgaTFHBuaT6ay06ic4iyl2rwyM4r9ckjU7xGiSHPS+QJwVcrrNOrDjDzgrnWifrbDfhAEpJTn3FdMZ0zhQ1scmmEtNk0IrurOx2HxXIrEmaQF6mLnYLdTuv0HMIF+Jv\\\/y7EPL0W0GJOujGs2c602Gs\\\/KpnOgt49nv5vUxcc0A8e2b56s8uIl3b+7lLjr+87sfLZmt\\\/t+tnX259dvWrv\\\/pXL9872TA0Mrp5T2HkvLv7kMYy3PLb22qJ\\\/n1n+ApP565OvvP3z134O1N+EEPOl5tkePIYc9HiK3ZkfYAuY0cxxmdXOEaU63flO0Www2xgOI5OXE2x6yRDQhfOG5Ed1+KQO6yZprrAzf0h+p+OSgzQ7djk6HVEH6yC2QHw7EBpfome0VcDsecSiSfaxU1zxA2Y0hmzJuhw7R1ccs4EQfMTYzcgbhYCRNyRgWQRGQ3R\\\/dB3KKo9tFsYOCUFMrmGFt5s3dd15culPJnQtWTzlvmIwg39\\\/qHzPEz3zyO5Nd0y\\\/f3XPy8Bjm0HEirUdRAGtDpdP1m3V7dJ16k7qzuku6QSkS9Y169bqdsaLzuuiOilZB7ZKYAmj45k7MeI5npV4IcAhdie7i+1kT7LnWf4ke4kliFXZs3DHspPE3hW2FmsnemBlfad4KclbW7RXpbCKzV1dXeyfz5y5ameDVz+mGgDmyPxb2617O+wR+Fn8HB1jkv\\\/BXeGZmcwyiVh41aptvF06bEnLBxf4UhfkFk4r8GkF4fVQwrMsx\\\/KFurEsF+AHSLOlZcwS6WPmT7zwLI\\\/9fFAIiCF+qK5EniyXsWX8bKFMt5pdwW3Xvcb\\\/hn2fv8B\\\/JfyL\\\/1a0WySJYxiW0A08HUQJnE4UA7FtOwbi4dhWngTYYUUMOOB4QRT1eiRBMGY6xKWIkIX9qmbjPVtBPesDiATAN0K4BE0GmrgN8h98YxfEhYUewqDhaUtvfBrfWgAT5gzRsIDt3b+jG3mCIhaLxYx2jR2PCku67MSQTkxMLKZbc4cS6Q7de4dULTvoix+C0nZ2WpC2vXcM8dGTh3wh4PiThxw0+\\\/SQou3rQabdGbTsoL53ZwjH9wUtn7BYtDlgNJutWLvAU1cOuejDfzmYEGuOy8s0h07b9MvD2I8FIDp+\\\/qvIIvzKp5HdayB+O4E7I0t7qknyyshtwAF3AxsUaly65RjiQHEXDo1tXecXxPLcQbE8Jba1HQ6A5Jq4ZG4nd45jJ8PlEsckc83cWi7KsSB5EmFiwkh70oTSA1p6J8InwVUj\\\/SST7ePbrKwY52oKqlVbCV3B3V3x\\\/W3QHnwQtLUfvXYM6SAmHKGXQXtcYC\\\/o\\\/uD8TOV+y11RiVNU\\\/TpXgqpjGH+Sl7d79Xpwm3m\\\/x61IZwN4a2BXgAScTo8xsFU7wll+xBXYmoATAAq7EcnzB\\\/BZhKlPSZIR5RYGuVMD3Xj5Yd\\\/YXu0KfnTPBbrte7m8Z9LomlGfg+usbfmWxFjJ7Oz\\\/rsZosFmDNoM5AVtke69K0Q620iNx2raGUzvNoukVzYD11zC7Bz+7aOmjyXe++eTzh\\\/1zhzc\\\/3DW7euK6Ijb4yKR582cfP3C0J438uH5e0SN7eh4lh5Yvn7LjwZ6P4rr2c8CWA70dtnIMbyV7lW7lT8wX1kvMFSvPUpkdBAhcoeDHlLOu866oi1VFm9HmsIDSxbxDlmSjwZiq1zSvHsO\\\/fpJLIyTVvK5LLtLs2uXqdJ10sS6G5NkdceVr+YHydfYq3svFsWgQVK+2EwIYu3hd9zp4s04SJUFieCVo5o0J2CRZ4gijr6VAeDSetg+Jh4H9ELbpqSWfVOyeokhdmYtvaXuODT56YHRz6eDVPW1kY2PDiIfe7qHvZ0eBz5gGOJGRG70aLrcIktswlr9FnMWXiQv5OlHMV4osRY4C12hlgmWCY7RrLjdXN00pt5Q7prkauAZdtdJgaXBUu5Zhu47n5NuYGdwM6TZDPVPD1Uj1BsnpZQUzsJwtVXsDak0N5OcKGAmKoIL7N+gcZTQod1MHEWBjKgpDE8poBA3yUOcwdsq7Jav8Snn59YPe1IPWtiGmc9N187n5OhZk3KqdgkPxM3H97fWoPff84nfYccef7z0XuXjs0KaNhw5v2HSIWHHa\\\/Usjf+h558934SQsv\\\/3W27\\\/+xVtvwtCbInWsD\\\/BiAU\\\/oTPgZgzJAGaZMUNgStVMlyWqGwZ842D448ebEZnWrKhY5ixLGO8cnlIm3GeY65yYsEhcb6pQG5+KEk+q7tk9cn3jeTbpgu5B0Xo2qDj+bpWTZC9giZQw7XpmjfKb\\\/c2JE0ZuN4F3TgJZ3QECLjO7UsxJWpLBUIa2VWKkdW\\\/NIniWA0H8MaZMhpMX\\\/KabVglpzqH9Ia+0VMofdpp1oSjMz\\\/VC1aU\\\/RQ7Wbzy5acu6OOQ8MND+7dPkLz7W3HYzUcT\\\/tmDp1S\\\/SxpyNX751Y1HOV2fPO6bd++9abHwBrbwCP+TXAlxndHb4px4oVFvvZfHYkO51dwLazvM4s6kSdbDXrZMSIWK8tFEm69K0iFlNUK7aSFPN\\\/6atYxp7u81Ug5rzcSt9P02WFeg\\\/oIuWNTUbtfUR5K31bEFthzPsVQBo2PDW8ruS224fffPNNt9uS2ODulluKnksbW1LR2vMetfclEG8ehPnn4o\\\/Cd7AptpQi3XjdqNRZKTUpq3T369anPmt9IfsUI+ucHpczd0L2+04ugcwkRBmMJddcca5urjRXP9cwV14kLtItkhbpFxkWyV3BrjQT3a1NzRiSOkcq01cHq9Pb\\\/e2pa1N\\\/JD1heCj90exHcvdI+wxPp+1JPxz8RdCRSF9kWZJCc8S0gEFiPWrQzuoHJnqoe+xNdpe4J7vnuQ+4z7h5kzvZ3eQ+52aT3Q+4iftlMhPiPkS9aIW+OVLwWfADsIIJPSxy2ObI1w6NJBnN+RgPnJtYn0gSvXaB9Q7UJ3uwJ9Udtrry3d3ktkNCaia0fMkbOpuJMz2D6VNBiOkqBp8cTEoGrx1MBisY41SkpppSzvW5D4N6w7iWUvCzL7ZO0tQajeQuZ8U3DVogmMsCfdWqsWbrhb5X+M6YsgunDUjyQ7gRNCsWxaowfIqsJiBdupCAuQFwSbLBrc\\\/oT0ApftkgZkgJOD1NJ\\\/FZbAJKVhKpWoy9uNcu2g5mZta6ddRXbaHO3vUjxWnBtIHg3Q8p\\\/MEOOnySSEx9BEsOme65Y9XygsCPXts+ecTQzAenr\\\/7pHHOnoa1u1SKHIydh\\\/SuPzqp7bfWZj\\\/Aw7+LWmlHD\\\/K7A4HHrJo1dkZ6cdcsdC13T5k4r9HsTrVJq3ohVc+fsvPVFymmp0b+TTG47xJZrjyGJvhoPUnfxZHgEAGvd4OcaZAkzyKHoskwSKANGb1JSUAqWLQEDjgriaN3oCqFZWCtsFVgEWnSX0CmcFM4KvHCcLEIuPOTggpiwgA64SH37C5eLtS2InmKqB8x5ecobsTdBAWdsB4LGi+ZC7TS6tr9NFM\\\/E4vn12evXHz5yxJqVnrR7pzK85ilStQUL9ZH7tvT8qDTbQ9dyN0jNee2XP356DHlo9A8+EFGtDvpa7FI4w2LLz7LiVNHqMGCrQw8Cb4bloDxHwOXUjKgTn3Ri5ySPJvbUiHoueUizZ5en0xP1sB6IcvoUAv02kKo7C\\\/EAq5vk7gteLvbaT9AM2g5ecSh+bBhYysMqRtkkEz52agisKGtIQLJoTkDUhmZmrgOdCHwS34pJC2pb\\\/M7rL\\\/eZklW\\\/vf3pyYq+S29unDr1\\\/pu6nui6pWFyQRt5qOfwfYPGTp3+wGYSgpABYhKEuJcAFxZyMKyYbDiTzZDIePNt5vvNjJliQ5fsy1e8ibFoIbw\\\/OTWf5Q06K5+gc1s4FrG8Xqc3ihYFWRmb4BUT9IlgDANCpphlzEcFQpF4k3EUM5YPC6XiBP1I01jzeMttpmmWxUK1uNCygl8ptIvH+OOmo5Z\\\/8ld16XpzOkqX04zppjRLjm0oKrQsEzeKjzGPGp7De8le\\\/bOGI+gof9z4S4gyPtJ9yX5p+sJymf9O57UwHAcIEzidJIl6g0FSzGag5oTDHLKo3dFx4QWSyaj+3CyIqmC2WLIgHOU4wSgZDAHZaJNlo2g2mbIk0QaPI45AlIFsGJQ5wYKFFU1mg1GWzBLLWGSDgZ6SIgTzFpPJaESS7YoiY3pUZa3MyN34ubCkTpZwk7RGIlI3mRnWTTbjJvMaM329MzOsVzhcofnXDAeNj+Ar1isLNCXkLr1cXu4CJQP\\\/HncPwJ\\\/3hTC977Jj3ynSjsyateum0v4vtm\\\/M6MsQIwQ6RqWYpk3x9yETOpOnz+6SVYNKTkTPIwzJGD3bhXJNqgUi975D2mUTOvOnQ4gjRs8eFOg5YyjwTZ\\\/QmaftrYrR8wcFNVZqib9Kp69gzx41qbRvCDLPHhJyaY+H0FByPDZSX+d9zzm158zR84cllVXpt6PKer+sYoy+d9QSQtmQaABmDWnhlxZRaG\\\/XfTjP6hxSaIUrXLCfSWPwhMjLx\\\/eVsHn7ju0sGHb0QKTr5X0ZH7DBnscvmN8kjT2PvfUOWXD1Y7LqyLUzwP0m8K3\\\/Btyv4GUvmSzYlOKOHco46g7NMW1jt4nbjTtMJ7mT\\\/EnhLZPOFHaEPIxVZ5c9SgEu0q\\\/D9+vFHMutbJlQpp9tfBQ\\\/Jj2mf4l0G36pf9P4tvIx81vdr+XfKZ9JFgvPM4Ko02Ge13EsA7rRBCIuY5NJVvSgIYisZwyKxJuISVJeQ6\\\/piBJAOhtCOobIr0HgGzAwNoOBkXQQDhFekYELkTTZgi3j5DsNKZKpktfdGZa6ccJLYX4Kv1Y71DsybFSZO0nKZFjoOPOq0\\\/EvqlHW6vG4LiqfKZcvfl5+A4tp787iDFQe\\\/3JLyGTaJGqME7tCRrmpL2ruMroSQ3rtKEtiyJDiDDGQ6D3ExYq2ZWgP4RRfSBf29h1rKdNiABrgQlSb56RHJAppfMukYRNeH9n+h6cHerMDhz+IPIjv\\\/eTjoshXJB1Hvh2be3Pe1Yih51d4fFmknGpyX2Qq81egnwdvOmzyYhOdxR5vKN02y3RAYsJyGBCqpufmK\\\/QiGHQWh+yypOnTDGnyEMMQucC43axPt6Rbb3GUWcqsZfY6S521zr6CXyqvMK+0rbRvkDvMWyxbrPfYHpP26k8oL5uP276WvrD9U+5RvrVFvUmgAgwK6BMJMW6b1RqwSDa4MRlAYQT0kk2vl6wWi8Gg5xmv24S8ipfkeF\\\/xEm83KTlisoYtYVs3mRHWl1jCFjLP8oqFWLrxzUdNOAWNTpBolcWk6sNh1ZBrmGxgphiiBmKAFodzTLBYUtKVoK4C5QExcQ89bg1UpYdgXMrlC276VcyLHpdyUYOQi5rSXhKL\\\/fdBKI03aQQFzWAEiXSBRL6MDNEvkT76Je4nj7bop0cLQ1JKYcjYHf3yiD1kjp+qKKPf+qTHk3C5NS22FQkfkE6HJp6YfpXRn7LGdlN28S1Oc5DTRxpOfZKVkpz1p65I\\\/YjU3FWz8iML9ynpqQmLTYlses\\\/2JetWLSWLr\\\/7ywM1l0ymd00FO3wM6G\\\/HmsGzpJm+IxIIHW5x0K+tXYR0AeHiStrF1KjwegAySrstRQjgkjcNjyBhxnG6yMhfPIDPEObopSj2uIlXg8N6B28U7dPfiDeI9um\\\/xZfr1gSDOELN0IfEZ8QMsUO59SbHnE9BAOvqVuTRw\\\/EiRTiKiJAUwAQNBMD1nTyq5LFiiVCkjOcsokW5s6gIjwfH0nWs2ElLkXUaMjGFjhXGt8ZKRM7Yj6U6MDyA8GTWhKN2aMCntPiqi1zey6K7vBW1HPf51hM\\\/AF\\\/pMexkTP82kGE9nxU6bQVgZP3B2JAMHReo9x9AiUiTB3amXKHoojmKHRVvKcLlGUxHk1KS9DI9lX76UENKJjoRh1NwfctKif4clR4jYIHkc1yU4rwDz\\\/tj78iF5Pns62dM2OzKZqe55tWnFIvznhxiRf2hZz+136B6PRmMeF\\\/dzEkSFQE4BDUO\\\/RwglgnjiZvAd3clm8whMiHqMpKAM6uOUFxSAfz6MvUIauZ9rW663hP2IIUIxmHnECxxLGAjHi9mdjPbN8Ae0t4ccol9LE2NfML9cXtpzpafXcFI1RyOv2BdN6PfFh504doK98o72rfHYj8mRX\\\/8l++lLbfNMxf8UE0TtV4We+lNaJs2PDDv0y+8O9CxUisSJcKvr+1U9uArDI5PQSAV9dyCSpxT94GfphvMo9ntQQiJaRp5Hq2hiX0StkI+A8uNsG5oJ6RykYkizIHniZaWQKiFNp\\\/fQ9hjkc7hZ0R5uFtrGvY4WQHoS4KfYP6G9fAg1wP0eaPcKi1AhbcM\\\/jx6Dst0Az4U2uRSGPAP6GQ9pI7SbAvkYSBPgOSvkN0PahF9Hm6FuM+R3Qx+baBmkUTSHeW+AuhJonwr3d0OfPNybIPkgpdMyaDMsvv76WCJgzcjDIMcWSCshnYR0DbxPF6RuwA5BSJwFqF2PkPQbRL8YiwxQbgT8mxohvYmQcgIhixchawpCtjBCdtAL9kMIOYIIOVch5IK+XT9DyD0eIUpA72mEktZCRA7l6kaY3s0IpcxFKDUJocA0hILLEUqD8Cb9CkIZl8C5rkAoewakfyM08DuEcp5EKPdthAadR2gwlOXDePlfAmrh2aHQRwjmVgxlw6Cs5CxCI7ZCep3+7qPGBcPhUoKqgC0JUlAOupl+l0nqAXaGtaIxzCREv\\\/NH\\\/yLaldH4ScLD4zBBRu7TOMyg27mTcZjt14ZDLu6vcZhHRj4pDgvoNJ8dh0UUFFbFYR3qkPfEYYk9pY1MYT2abxwYhw1ogXFrHJb5Lv5SHDaiucYrffy9xjStTwY409\\\/iMEGCZUQcZlCOZXAcZvu14ZDBMi4O89C+Mg4LaL6lNg6LyGpV4rAOjXakxmGJVJp+HYf1aJCjru\\\/XLfMcO+KwzMyxvBmHjWigg\\\/6OBGYp1g2OqxqsUcSp12CeljsTNFjQytM0WNTgQg3WxWkUg2M0isExGsXgGI1iMNuvTYxGMThGoxgco1EMjtEoBsdoFINjNIrBMRrF4BiNYnCMRjE4RiMKS\\\/3Wq9fWMlaDDf3Kjdrab9Vgha7FuVCDrQBbnEs02NavvZ32E4cd\\\/crd2rObNDhBGyvWZ2K\\\/Nsn94FSt\\\/SManKnBT2vwAA0+SGGx3\\\/zFfmMZ+pUbetcyA61AzagGLUCVIG81SEX7IM1AtRpcCgaiEVJ7vJWKRsJdK8D0WgnldVoLFUrq4fmBAI3Syiv\\\/H3vK6ZuZiqZDTT1a0temDcrGQR4bbxAKwScXDYhDg7XSEfBEPeTT4JmFMId27alp0F8bpFa0FK7V2hwaoa4GNfTNpBXGVaFVZXykWPs6wJAKT9DnaY+NKFsbhdZUaiNVxfuqhJLYkw1aj3QFtTD7Bq3HOqhp11rXamNRrLfHR2jTVlilPduu1TdqvdCczqlJm0NdfC3NWt90RlXarNq00WgNbV+t5bH5L9FGU7UR+s+qTuu\\\/HeobtftlWt+18dFr4m2btL5iY\\\/eW12t9t8cxUgV3Mcx8v1079FmjYaUO8ljfVfGSJRqmKa2uc0mTRpdWDaP12vN0ppQ7GuJP9Y5QpT2\\\/ND5qXXyltC6GzetYWAAtaW+x0ut4rYtjtym+kjqt\\\/RLt7jpV2zSOrddm9595oldy2vrWQusatP6u99EK4yyOz7Yyjv8qjafVON\\\/34qxaG3uhVhp7fhnU1MVpSNvUA+1jPNIE14VQtzSO7VgP12W5UqNVjDtUDYdV8fXXaVSr19o0a3IW48ZG7cnYSvpzd10fZ6lQvzxOmQZtNpQ3Y3Rri0tyfd88GrS769zb\\\/j190\\\/a99VXFx5iv9bBEw3T1DbxZg1qgvBezS7Rf8+1d4QKNt1WNB5ZruG3T+K5do8bCPqrTucfkncpSdp80tcW57Lo+itU2aBSpRCu152Ozpv1WabXXOS02erWGrWZNSlb0raJ3bPr8Mq2+UsNEa3wMKkMxLLZrz\\\/fOuLf3Zo2HGjQd2ju3gT\\\/Qq0U3UI3qu4Ua\\\/1PqFqFZ8fF6dS3VlUPhqkKcWKrRoFWTh5gcZfTrqxT4+vrdTzQ+b43LfYPW++I+Gv\\\/f6vwYXRbGNWFNXL9d11OxXmeCPVDRFO15FQW18UrhOhnGXqBxbi\\\/GKG+2adiujfc2EE2CdjPAeoyBNBJWROHJUEqfHwPXiVr5aCiZDlcqA2MBi6PhU6qVzkCy9is2krbKurgcft+G9pbHZhyjXHOcttdl4Yf4idm8JsBBq8YdtVrr3vX0av5efpqv1a6A9kv6xqzq06Ex3C3Rnr2u+2ri0kE11HV9HdMTdXHd3BbXHQu1Xmr6dC\\\/FbVl8NKpFlsZ19vw+qxcbs\\\/2\\\/wUwvby3r04I1ccmu6ZOdVk1Ptcf1xoI43\\\/8nfPVKO8VYTb9ermuLH45XHecvysvzNQ0cm\\\/X8OGUa4z3\\\/Jwqlaau6EVMxzf9DrvjhyL06lGrLSs2jqYRR6+PYbovrqv9q7IEa7zf20+crfkCLmrg3019yYlaiUptRs4ZZarfqNHn7n2muxnmxsZ8O7R2XSn+1hum6ftaqtZ\\\/Hld3XurUf3173Ef57TNHZNWj99\\\/JV0w39LdPov1ijZn9t0quHr7dsgrYxPbNEwzjtv7ZvPbF59efuhrjmjuE\\\/JlXNcf64ruFv5KH\\\/bkXX+WOctvYfUq7Xx6O2rSbuCcZWE\\\/MrqzSqNn6PBq3fw\\\/f1nun6mjTNXx3Xq0s1H2wZ6u\\\/F\\\/c\\\/U7+0vJpM1cV\\\/jRovc298P6RjD1nXPuErr84dy3Euxyu\\\/hesH\\\/0WyvY\\\/mHI9zoV9w4o5q4t9wOFrK3B2plRkDpAERt41CUjwrBHqpwHQR3AyDeyIeUi2jMORNNiLfM1X5ZPx8+MbgQ5UGiTw1BBRCb0ER7r9V8kmYYLwc+y7TPQM223yjxVZrm+6\\\/sBIVGadK5rI8vYlawLq5t6ZymaRo6ZkMnxf2sprgHT+UzZklbtZo6jQLT4XrdblCuopEV9RP+z+ado7VvgLFy4NquaQhKqxzN9szTuCTmTwzsa\\\/n\\\/d4Rlmg8Qa1vz\\\/2WU3rqc7\\\/FjX98zVjTXLKisqlH3qTNqa9TSpsamdihSRza1Nje1VrbXNTWqzfVVA9VRle2V\\\/0OjHNqZOr2pfgktaVPHNcJzg0Kh3AFwGTxQHVFfr06rW1jb3qZOq2mraV1aUz2yqbG9poF20rpCbauEh6C8boFaXdNWt7AxWx3RWldZr1ZBq8o6qGxoaq1Ra5c0VDbWtbWrVbWVrZVV7fBAW3tdVZvaXlvZqELdCrVpgVoHozS31lTXVNW0tTW1tqmVjdVqJfS\\\/pKpWrYt3Vdeoti9prFGX1bXXwuM1UNpUTZ+mcH0ljAHPV8Jkesval9U0ttfVQOsqAJa0rhioaihpWlrTWgnLa2+tqWxvgCr6QNUSWGIbHaytaQFMU5vCgiX19QBqc4XhG5pgkLrG6iVt7dpS29pX1Nf0xwQlThsdpaa1oa5Ra9HatBi6rYT5Vy2BgRq1mVXXVS5sovXLautghbU19c2AkSZ1Yd3SGq2BRuVKtR7QoTbUAO4a66qgeWVzcw2gsbGqBgaJobuOIkutWQ6LaaipX6HC2tqAyPW0j4a6eg297XG+aYuPVwVPzK9Rl7TVVMewWdOyhE52SRXFv7qgCZYMPcKi2tvrGhfSpbfWAN3b27IpmdoAZRofwW1D5cLKlXWN0HVNe1V2DGnweHVdW3N95Qo6BH26sWZZW3NlM0wNmlTDFNvr2mjHtHlza1NDk9bbwF5eLYotbVrNwiX1la1Fs+A5yrWDBw4drKaX1lW1NlEaZWitSmdo2V51RivQvqGydTFd8X\\\/H+bCWhcCE\\\/6uxqw2K6jrD55y7YRcM8lGDNCx7LwJrZJHFFbN8qOzirki2CgJa1lJhgaug4FLu4o6dqV5n6kydNJpJZ2xrZ4rNj06maSaXpUMXTAc7tGlD05pprZ0xX5r2R\\\/2REvOjqb\\\/oc869oFQzzb0+73s+nnPOe855z9mz7rJXhb8JnwL1QIfSFksobqVzr9J65EiVMEwd1tTkIGhV+1o7W3a37Ap2trTuU1p3K19p2RXe1xFWgs3t4fDe8L7O7KzsrM5BTMXySPNp4RWjc+h1QszCij1YefGjY7HRwVOiHe78fJz6Timn4uO8ZD\\\/3UFg3fmJAeB98Ag4l\\\/Bo+MQRvBj12dExVufdWKVEUG4zBdeJ9fOmhZGKVMXy0ktwFVUy2ymdnTO1PwDeOYOwf2MWnPX5UFRThFivlMJ3w+L7xBKqGmXGswoc6tFFbNgrOvzIUK4W5hyonY8PjsT54ZUyDVz1cuko5cEL4+anlXqBP1uRgScQUbVTtHzoy1P9ozxWM4gnhobxsbGBgiM8xPGdMbFyVPHlMjK3YEf7HqOGhkSHeITQieMn42HHNdGzhwyIxnoTPjPcND2mDvB3UZQ73CJwb9mOqRk8ppsNbI7S6ITEeLUcedI7veN8YVzXRDPbKfnXshNWDMctuQdYG4+PDA\\\/DVk0Nq0tziHuk+52EmVewaAw+2xZU+wiyxGfcnHswx71jMsvrI46sVJq8UsPYKqyK0E0vUc8KBjqCyWXmmtsa\\\/SfFvqd1cXVNdnZl5IILE6i1bamog\\\/Vv9iv\\\/ZbXXb6rKzBhOJ0XqvN5lMVo0sT3x\\\/fOThNaEqobFYko8FliCMQk3t8T6s0H3Ys+LY4Cv5Ih0b6h+KKR0xsTY0vGLV+j6nbu9gYmTYO5LgT+fyjmg9Mb5PVPHEL1ggqQ4jVf3\\\/RXjMa42jYOMwFBdvg\\\/kB5IQ46OItIM3Gi\\\/kxxO+Ko8Byfoc4LPIjET+0DEiXpUnpV9IcMCPNSj9\\\/qK6YOBgsx++IutVVbamrahP12Vy2LbaIrdm2A7IO7Jh4izhgHUcGqUF\\\/IhFxxOP\\\/CTMmjme8jpXPwcjSRv6LM49ewVKSI60ni8ASIBEZ0gu0Aj3ARWACyBA8nhIHzgBzwCciJyCtT720NZCGel6oqWPDPhGNmdHur4vo1Fejpt6739ShFpNWb9K21JjJVU2m3lhp6vxyn851VrbvWrBAKiDvSPyDi1FIyn5DciglMrkiPUUMgEkZVkpAyp8qc\\\/sm5iQboRL\\\/XHuAyEvXJJrKzvMFs9gSWyT5RGb\\\/Yh+bOezjqbV5vongc+wj8jowB0jsI9x32B1yht3m32yCbAQmgDngOrAIZLDbuD\\\/E\\\/QH7AKz3iRdoBHqACWAOWATs7H3IXPYe\\\/yRNSB5uBBh7DzKXvYtuvQuZw24hdIvdgml\\\/SfnrfDMi4PFaAbncCqwvsgL5Bb40+3Pq\\\/iY5zf4+pXjkK8FqdoMYAENjN1D5DaIAbUAvMApkIHQToZtEB14ErgAGkIEyN1HmJsosAG8DN0k1EADaAAd7J4Vm0ux6yt0kBwvYn9jvyHoM6h\\\/Z74V+m70p9B\\\/Yb4V+C9oFvcDeTLlkElyDfIIyudC50F7kP8F+PVWWLy8F89gchkeG9AKNQCvQA1wEMtgc25AakPNRyVWy4CBgpshdoX9KXnaQwDE54N4FH1O4cNfvQAhiQplws4D70g8R5cJ94SWEuHB\\\/+7sIceH+5lmEuHAPn0SIC\\\/fAMYS4cB\\\/qQYgLd2snQhBp9uNflm2U\\\/a3HqRLMYUmMUhKjlMQoJYmNJflN7tu4bT9KVVTI\\\/PEVnk0Vsj5L9Teo3k71l6muUv001c9SfTvVD1PdQ3Un1V1UD1D9Kq3FUOg08ItV0bpAIdUXqP4a1TWqu6leTvUyqivUH0izklTLVqHCQk0F+bqC3rHTlwMbSzCiJXDrEiz7OcjrwJKIBUBSNpjkL7u43jBV0WjGq+p98eAeNo+C85iGefIhYMMEzcON5lEJ\\\/1pJDmQj0ANcAxaBJSAD7A0w\\\/KKQOZBeoBHoAc4Ai0CGMGcRYCRumfi6MMxrGd3KY2weN3+CWwkrCRTnOnM9uXuki06a46KtriUX85OCAmxx+XmOvDTNnv4s+z+fZZPMYCa7wC6SYkzEi5a+mLpfLKfpD1Luq3LwKfp94rLB62gdcdNy6Fqiifg24nRwXUOc7FVoX8p5UOZ\\\/UOeulGfpWl5qWr7v\\\/Id815lmCP7TeVX+m5K20ZT8V6S8Oi3fcJ6X3\\\/KmHUh5w52mULOKoM44a+XXFgT1LDIup+TTXE3L33I2y8edIkM1Mw5riAVy5Hb3IXkP6gs5++SAhjqn5UbnYXm7ydrGy0zL1TDBYwYrYOwmp2i01CUqPOBP08FApf2Svcvean\\\/W7rNX2kvssr3YXmRf58h35DrWOp50ZDkcjgyHzcEcxLGO\\\/wGqh38xYV1GLlcZ4tewbCKcy7hk4nsLhFEHI88R40tShEU6mmjEuNZPIn2K8e+O0jTN2n\\\/IeKK0iRr5ERLpbDJqPZG0fand8Hsihr3ta12TlF6IItVg30lT0tmVpks86VwRf\\\/zUDKE079wLRVw\\\/c+6FaJQUFpxsLGzM35lXtzv0GNFryYd++6twVbjYuBTp6DJ+Vhw1fDywVByNGN\\\/jz6eaoZ\\\/ST8KhGXqPq2jXjLSTfhpu5+nSzlA0GknTg4JHFHoPPHjMPcFzuIjCeURxuEzeZZNXjvLglXEFXmYmKRe88sxMwbNRzpvUysKhybIywVmvEE1wtPXKw5yFcnDKywWnQCcLgrNQoHOOsVNQnE5QXE5BoU8Tp6A46dOCcvABxWtRzq9QzouWJPqA4zQ52beXOdm3wfF80Utt8njoVEO0v5s\\\/26u3NKwCvcbzJwcLDb1PUSb7o9ZDv9y9fXiHCx1TjWipGjL6S0PKZEP3Y7K7eXZDaWiSdIc7uya7A2oo1RBoCJfGQtGp5rYa\\\/6q2zq+0VdP2mMraeGU1vK1m\\\/2Oy\\\/Ty7mbfl5235eVvNgWbRFhE+3tY16SBN0V3dpp5ia7Lgr71FJdGmgtzRncJ5G0oKTxfN4kDyClnjiRpPljYZ2QDP2hzcHORZWFM8ay1\\\/gJuVVXi6oaRolr5iZeUiOa+0iXgS49o4KQwPhcx\\\/Gi4kJcb5gJvSo33ehbywEYiFtAQhEaOiI2I07j\\\/UNWm3I7WXd8moX05bsyacXrpmJlYhsZ4nStIKkadt52mZmRbx0fkft7T4dqTOrk7RgIsmiBaVDFekk2Er6LSelDWL4xJ\\\/edCi6KBGPVRbrkOYbT0SifD+LiMxboWscUhY2iyFItrycKxcKIOt6r9YuZY5CmVuZHN0cmVhbQplbmRvYmoKCjE1IDAgb2JqCjIwODgzCmVuZG9iagoKMTIgMCBvYmoKPDwvVHlwZSAvRm9udAovU3VidHlwZSAvVHJ1ZVR5cGUKL0Jhc2VGb250IC9QWEFBQUIrQXJpYWwtQm9sZE1UCi9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZwovRmlyc3RDaGFyIDMyCi9MYXN0Q2hhciAyNTUKL1dpZHRocyBbMjc3IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDMzMyAyNzcgMCA1NTYgNTU2IDAgMCAwIDAgMCA1NTYgMCAwIDMzMyAwIDAgMCAwIDAgMCA3MjIgNzIyIDcyMiAwIDY2NiA2MTAgNzc3IDcyMiAyNzcgMCA3MjIgMCA4MzMgNzIyIDAgNjY2IDc3NyAwIDY2NiA2MTAgMCAwIDk0MyAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgNjEwIDU1NiAwIDU1NiAzMzMgNjEwIDYxMCAyNzcgMCA1NTYgMjc3IDg4OSA2MTAgNjEwIDYxMCAwIDM4OSA1NTYgMzMzIDYxMCAwIDAgNTU2IDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBdCi9Gb250RGVzY3JpcHRvciAxNiAwIFI+PgplbmRvYmoKCjE2IDAgb2JqCjw8L1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZSAvQXJpYWwtQm9sZE1UCi9Bc2NlbnQgOTA1Ci9EZXNjZW50IC0yMTEKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDAKL0NhcEhlaWdodCAwCi9GbGFncyAzMgovRm9udEJCb3ggWy02MjcgLTM3NiAyMDMzIDEwNDddCi9Gb250RmlsZTIgMTcgMCBSPj4KZW5kb2JqCgoxNyAwIG9iago8PC9MZW5ndGggMTggMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9MZW5ndGgxIDI4NjYwPj4Kc3RyZWFtCnicrb0LYFTF1Tg+M\\\/e19+5u9pHN7ubF3mSTzWPzzoYQiOQGkghEIPIyQSMJyUKi5EEePLRCfCLgA+v70RJtq1ZtWRLFgFLxUR\\\/t10+s1qLVSlssauWTr0W0luz+z8y9CUFt++\\\/v99swM+fOnDNz5pwzZ87M3gSEEUIWNIQ4pLV1tfb+7szfolDzXwhhZ9uGAfV\\\/jtxB4aMISTPW9K7teoj7HxdCshch4fy16zavca28ZAtCcS0IFb\\\/dEW5t\\\/8Wt5ukIaTOgj+kdUOF80QL0Wi88Z3R0DWz65UrnNfB8BzxH1vW0tSLu3VyEqmvg+cmu1k29ks1xCp6\\\/hGe1u7Ur\\\/MvO6HsIzYHxUhf39vQPxHLRbxFa1UHbe\\\/vCvT9wX5MAzzciZF8HdRjR+dAZISyif\\\/vBUx8Ih3iBQUAp6XUmWUFmizXOhuzI4UTxLpTgRsgzSeNNTELJKanTfEhNS\\\/dnZKJAVnYOQrko+O8H\\\/48++N+jfOtHOIBSWHoEpfABlIJQ7NhEinbGjtE2WpJPYIxUPRmfEfQE+i3OxioaxV\\\/BnL\\\/EibgYzUc8+gKsZQ8aR3ciF1qG7sJOlIHcaDmaj3nACaKb8P2xDbGP0Xnou+ih2NP4mthj0H4rehl9CRz8nseoHC0C\\\/OUojD7mPkRNsfuQCW1DZjQLLcFu1Irehp\\\/PgYfb0R3oZ\\\/g7sS9hVBe6BvqrRNWoOvZ87AwI+SZ+l3BEfgrdhp7BYqwt1ommoXS0gwRjb8c+QAHUhH6AngCegvgQPw+locvR9egenMi9DNCd6Icoii2kmZsrPAcjzUcrUDfaiHagx9AvsBM3CEeEk7ErY8fBGuJRNvDUiT7GZXgh+RFvic2OvYsuRvvRqzBf+nOIv5h\\\/RLg4WhX7XuwFlICexgp+Fj8vlAi3jF8dezD2U7DIACoGiSyCcVaja9Hz6DX0v+ivZGtsK5qHlsLIP8epWMUBkPjbJJFsIVu4N1EBzLYZuB1Eu1EENHIAPYMOgmx+h46iD7ELJ+MFeDW+Df+VWEg7eZ27n3uSe4vH\\\/I9B3n6UCTIaQD9C+2A9\\\/wq9jgXovwg34MtwD74bfw8fJRHyKfmCN\\\/HX8v\\\/gx4VA9Gj0H7FFsc+RFyWhC9AVaCvI9gdoFD2J\\\/hv9Bv0V\\\/Q2dxnY8A3fgB3EEH8WfEpmkk8Wkl9xFfkR+wi3ibuOe58v4Ofzl\\\/K\\\/4d4UbhJ1SqxQ983D09uhPom\\\/Eno69AbYTB\\\/0HUB1I9Gqwih+h59Cb0Ps76H30R2o\\\/0P8svBJfCqP04xvxHfgn+Of4DfwJzBKxn3Qyi9TAqD2kD+R0Dbmd3AGjvw4\\\/h8m75H3yF\\\/I5J3Dp3HRuPfcgF+HGuMPcn3k7H+AL+GJ+Mb+Sj4FmSoTzhaXCo8LjwgvCSbFSbBd7xY+ka6TrTP81njv++yiKdkQj0VGwXRNY0hUgie+jh8DunwQd\\\/AIk+t\\\/A8VF0CrSQhNNwFvBdgetwPV6IL8KX4DC+Bm\\\/D38X34PvxQ\\\/inMAOYA5GA9yCpJktJKwmT68g2cjN5En4OkNfI2+QIOQGcezg\\\/F+SKufncSu5irhvmMMBt4a4Dyd7GPca9zr3JHec+4k6A1jz8NH6Qv4K\\\/l3+Ef5J\\\/Q7hA6IKfh4TnhEPCG8IZ4YxIxCQxRSwULxMfFf8oidJ0qUHaLr0l\\\/c3Ui1NwLnCuTvUWJBHW4DTyGHHxW\\\/EJqEjFPLLBzIOgh6WwKv6Gqrgo6CWOtgNvCSSRj6eUosZHgH4AP4PK8M\\\/RVpFw4LL4o2gEv0eO8i+S89BvcAtO5B\\\/huoVfkDT0OHijXeRZ8gyeg54klWQFeYBD+EP8KPoQ7H0TugNfjvvR4\\\/gEnomvwuV4K3qLuLml+DpUGXuI8FjG8\\\/FJBBygq\\\/l2dOm\\\/8Z4V6D30cfT7vJX\\\/DvinMXQXaPQJ9AH+MfoKC7FPwbtx4I1awcvcBPZ+PaJerxnW2VZYj4ngQdaJr6Mn6Y4ilYuz+SvQSfR39LFwACxqDnjS49FO\\\/vv8n2LlsXxYYbDK0KOw7jrQ+bBiPgQrOQjP9OkSWOkK+JISWNUNaCVqR1eB17stFok9ELs2tjnWg34JtF\\\/hPPwVHoYVMQYUlehV+LkVvYN3wjo8\\\/\\\/9sF4i2o0PoE+zFmbgE1sMJYYOwS3hMeFL4mfArsRikfR26Hyz6j2DNCsygDb2BPkFfYBPoJhHloRDwOwN4b0TrSBN3EM3FSagX1mw2+PE5xkz6oZdrQHoPwHo+CGvjJPiJS9DP0BFMsAdm1Abjm6CfepDzKsB+GDR4LR6Fmnbw2rnoLzDvODyDDMB4GvR0F3itQ8DTe+jPIO0Y4ysP\\\/EINXgF9fYEuQu0wwnTUgPeiutg+8FSLUA33XyDvDGxHc3A6\\\/iHQtcAKjUOpqEL4EyYoL7ooNoN0cgdhj4lB\\\/TDsXsnoPLweuLDBPMZRAl6MyqJLUJ6maVWzz6ucNbNiRnlZqLSkuKiwID8vmJuTnRXIzPCnp6m+aakpyUmJXo87wRXvdNhtcVaLWZFNkijwHMEor9Zf16JGAi0RPuCfNy+fPvtboaJ1SkVLRIWqunNxImoLQ1PPxdQAc83XMDUdU5vExHa1ElXm56m1fjXyqxq\\\/OoZXXtgI8M01\\\/iY1coLBCxm8i8FWgNPSgECt9XbUqBHcotZG6jZ07KhtqYHu9pqVuf65YSU\\\/D+1VzACaAYp4\\\/L17sWc2ZgDx1M7cS5DJCkxFkvw1tZFEfw3lIMJl1ra2RxoubKytSU5La8rPi+C5bf7VEeSfE7EFGQqay4aJiHMjEhtG7aSzQTvVvXmHdtw0ZkerW4KWdn976yWNEa61iY7hCMK4NRHPFce8Zx+hc+fcxm1TW5O5HbXeTpU+7tixTY0curBxamsazZuaoA+gJZl1LTvqYOibQIj1S1UYjVzf1BjB18OQKp0JnZU+v7C\\\/lta0XKZGZP8cf8eOy1pANUk7ImjJ5rSRpCRtf+woSqpVdyxr9KdFqpL9Ta01KXtdaMeSzaOJmpp4bkt+3l67Qxfs3jibAVisU4HwZBuDGDqF6pdMShZTjvzzwSAiapsKnDT6YU4zaBaegXa0zQA0+DRhoIq0g0Y6I\\\/Lclh32mbSe0keETLtf3fE5Agvwn\\\/j03JpWo0bMtH+OKEjtZNLUoH0CjgSDkdxcaiLSXNAp8DibPZfl520YI9P9vXYVChAfagDZtjbNLATxp6VRBe8c09BqeIgMXdioP6todfII0gqDTRHSQlsOTbQkLKctQxMtk+QtfrDkJ1mwnBAxBSb\\\/2ezu+NqOmRHs\\\/hfNYb29fqm\\\/\\\/sKVjWrtjhZDtvXLznnS22dMthlQJH5uI5dMDIgkc6wVjPKSSWT60GiJ8JnwT2RG3R7hwChZBVbrIvaWeXrepKSl\\\/VOaMck0hWgsdpJSseIsmcFlZGbw3OdZ5zyfw51lBwf88gFSv2zljh3KOW114IB27Kjzq3U7Wna0jsWGVvtVu3\\\/HfvIIeWRHb23LhELHYgd2JkfqbmqCSXTgmfkQElBpC\\\/ADO6yE5jxJcFSUxkiVFo8EPsohReKjGCWaRCFKuGdxAMkQWHqRN2g\\\/XTleuch+qnLheCWqAth+BrLiojRHmiMTMgyb9RmVO3RGE9A\\\/kMofooekaryNdJJhGKtESyvCGmw+5TCynVO5Io7nagQ7UlERNCfyP1rnDS6yH2teaP9zMyo80VxcFA89V5NsCNsSo8dpb7dD9gROBPQMLYHMQAoJ2JCP9cBDD2s30B5ONS8cR1ULTxQXlQL97fQ4QKkJWhE7zscJh2CfUdHtWv0m5UblEfyY9Jj8SNzT8quyaYWjyd2UtMK31tHh7kha6zNVkApxujzdOp\\\/MF2vlOusj8i\\\/Ja+JL8kvWd8jvxLfkt6wOu1f1Eu9Y7JCW6XSHvA+brD5boY3YNHiyPYyE1COLIfpPSncdMSemvfkC42\\\/hiUX20+sXnkBVJ4LraSouws2ouRmXeNwOuyT605HDXj7dky5KosPudpeWTC+f7rAHAqTkN5tu3bXxN29Hv4K8tMGdGlpcqhfCoXuejK6Ktuy7C8Kwh\\\/H39931cfWyrih8nteql60DsZPnq0GCD4HwAyADGa3Q5MvJlWQn4Qg\\\/hnNGVwlYGCOXPm2SBYwsMpzgGkFmmDRrVgHxPl7lIzzPJyoH8CMQC+mCrlxIbQKMoaryVPOJiuIi1JyW5hClsukZ5aVcIHr8vje6MSk6xvt31cYyXruB6vAiiEK9wsMQ196wH\\\/Gxo1qxzRFSzEnmmfwMZZ6wwvyY+WfmX5nfMStpZmzmJOQzF5pJobnKvNjMmalczQeoQeEnniYE85LJYhrDjaOFEgYrbtHiyGIOc0lWMGGLIe9KkHblwlPN44xR+4nxYPP6SuxwVjRTwQfByhJEQjxpTmf5RdzzG09fjaP\\\/K514mX8QC\\\/81GF0QjX8BF5FNfwdpvAYT+CPEyXTlFGjJ3AwsijN4Rd7DESIGsCoUCUTYY\\\/rV43S1NNMlUnkatFx1QrdlDOk1ao1w5LXS8szfJmyTrsnn4OwvIQWX7EdS7Igml1eExGzIJGpecnZZSNQgg6cjWkNaFrRBloNy+VwhWym0zEDlQpXlMnQZCXNrhA7TWuUjzrZAxMQkY06RZV6SMQSzkgtiZlHmeVUQXYIgmhQtKXW2QocwJ6WGlEzCcSIvj+FntThRIgLPY2SyeDxJaIy0amYfZkfWIczhMZKhyT4ZF8lDMpEPkAzEA4asgh0lmi9tm1iKiaeb159qXu8dX1QbrvkzqACEUlW58ATIv7ByPBis3CYUBLdd9dK2Ai8tJHtl5baXXgLN1EfMS+sj08BJ7kdcLDpi4pUDsSiI5sxekZ9BP014fXOQfdLSOPjBafEcJzwX\\\/dnQ+L7N0ZfJLFyR+4uX8cLoqHDgzA6ijh8Fzd0Fkl4Nko4HL5CHjmhVG3NxR9ym3D\\\/zp3leTkuQxey8tEy305ewOIEUJexJIAkJLn96pjPepLoyMSLJWb3iEBzk6rOz9liwBSQ3KptDljFyE3i4Aq2goaCloLdgqGBXwXCBSS0oKiAFrnQVqfFF8SR+jOwczS9eOrF8xisX2pvXnw6CN4AFxLwqTY6Kwub1sM3sRwmxoZHUigQYZCSJFkN74ytgvk2ARC0YQZoUlQ1EtVdRQSzgTeLTSqaRBJcouSEcFsGTCGnYUVpSPn16WSiQFfBzjjTjIeC\\\/iyz46ePbVvasumFX84MbFkQ\\\/jFpx9gs\\\/yb3govoFeW88hp3DwTlLtc2\\\/EA6kXnLvqrVPBLOe3dp+cL3VRPiXoz8R5IvOr1kuC+P7o5tkS\\\/OiOZfk0nXeGjsuXCq8iZLQW9rCG+Ttru3u3ege8RX5Le4t8+ecnClnW7KtOa4c96AwKN8gmKR4yeOJ93hySC6XKUjZQhVejO8V7pZf435ulvASO731PAlrhUrc4Q2xUrFCiVdqHm8+b4rT4pyhuPpVNrzYhm1agjdkG8PZWrozX+Fsn8WtQJ8h6JLgpKIUnJKQNSxhm+STiiQOPMdNo8lbDLWspw66+XQz6ARUMn4K3MWxIC0pQH0cbgZnLYi8XwVHjdJUj9sjgBjTqbcGZ81XYd+c6K8+jb4XvRFfgUPY+mh7SfR3ST\\\/a8INfvjq84TGSfPHJj\\\/GteCXuxnfuvjRS13fdJ9Gvop98eheV253gH0+CfZrRLu08kwAOLlN0+gRcJOwB5yLIHJ8JzlyRM80Ijjb1HJmnIHCUSaq1yKpZOSsvq5huiCAnsDXLVFtjswJPWHmq8ltMTQAbS60QwMbA1IRzTI0TYFWy\\\/TQhzUh38lVnPiZHx1WuVDjwZfSZL6LrvwDu7wburwPuZdSnVQH3opApqaYi03OmD0x8oWmXiZhMSJ+CDPxXiYthJS3hICohSaq5yEzM5\\\/KvfBv\\\/zfqWM17ppMx\\\/G393cyfGZ5H28Qcobz\\\/6cvw2KtnVYJEHwSJVWPV1M6bVT1shbTBtsFxvus5yvee6ZFn0iMlOjzM525HtzU7KnmaaZ76YXyavNF\\\/GX8lf4R1I2he3z\\\/6K9WX7b+3H7XFciqhSE9R8SRU+6B2mhN0p+aLspFborF8cj+OpCcZTE8x159s4BL4zcRVUZzlXEJ+qcjDl9KJ0kp6YNaxgm+JTihROoaaYtmX3OaZIJ28\\\/dWI985m6SYJFnnBQD7o+WMmcADNLXAbbL+9PzyBlIWf59FKVNywzwe6kYUQZV0W2NEd3P\\\/Xn6GNPHNp\\\/86+xA5fmRd\\\/1PT70wocfPdv8zFyS\\\/MX42Mrtz+O1b36I21fN\\\/\\\/AX5euuOv3X6D+i\\\/5gfOgDzpP4zl9nnD7RMmRcUjshKJu\\\/cA9suh0RBAFVKJhNYp2BSxdfZtrxTS9esDdYWK9drHbISaqrD1kNW3krMurIPgWPWzXXwXNfYd7rZiDfZtgEZ1TmzV47ZK6e7Rlp8zV4nTGLy5y6cTWpwdvTI+LPCgfHnSPVXdeTq8a0wp5vAPJ6EOXGoh62D0ZJQSKDuxZ\\\/JSq3K5QkhQRMahCHhqCD4hBahVzgp8EMCjaw4ZCLcOxBXRxDsMIeok6KTOgxPPOrmiyeU2WdMpaqSBh7r+4Bbyt9NOFs48FUd8HEvyPZFKlu8WUsyidjpVBSBIxwPDlxWZJMiyCZZgXjnaS0oiS5JEjm6kSuwkSuKDBu3wsmcyQzYsG8DY8hsNkkmfoy0jwjzTFBoTok5CjIp+Qk30XZW7onU5Ly695sUeyLIHXYcTwWCBFu2N8hfZX+JASYKmOyVppc4msPk0NxGLTEgZsm7+HvEYQgcD\\\/HSdeKj\\\/Ef8aQFii9jR0fIlIZkKNgOATPE8ZYC7gbuXu1e+T3mMO8C9xinPc4e5Mwp3njKHI32wzePg+uYmpncx9tGo01wljsU+0uJt5iq+yOqGzOKq4lWzswos4fCoLVEv4zx6CRisBCRWGngjcfFVSI8gMMth66QawWkY\\\/kmOe8FiVuBbxo+QuujV0S5wy+ODZOf4z89cTSKfR2tBY+BYxETQmAU\\\/oZnNXMAUMMOxBkPnQ5qcMjOkqDNnhdiMjVL7YUoB1EImgj7\\\/JH+qQNShKPEkhbfLPsVP8nhVLlTWkg4+LF+mbCSb+B\\\/KjylPyQeU0\\\/JXins3v0verbwsv6b8lhzh35bfUY6Tj\\\/gP5U8U60Z5k3ItuYm\\\/Vr5J2UWkRnOYXMavlTuUDWQzL9WQer5GrlcuMl0kNyqSVymMC5GZfEiepVTFSRyx8KIsKwkkiffIEGPO0vIhalR5kyyXcLyL43hiVpQSjgBIzCaOs\\\/CEWMDqZMnki8NxY9g6Sm\\\/aDsCxjK6gi5v1leNZuiwklEiatNWETQe3gmgOmlWzhYyRGZoTlowGiEgDJFTio9EUdGOlTsB+av2JYNBe+T\\\/2yqRE+\\\/j68fWVSV47xItQYT+2HizTzkxTt8YpAWSQxUPxS8FSTLGje80qjROb2YetuCACSwIlg4Z1TTtuw89gBUv42eiJ6PvRP0V\\\/D9Gil\\\/voqzr+mn9soQn0fA+sTD\\\/d1\\\/DDWpzMiaZEzmPinbDuQdWI2iP1QHTWtNRyYUJciWSCJWriTIRInAziAlFxPJ0wTyfMl4ivszPXTi1RMzeYW8xcr3nITIbNh8xE3wtNstEpWytxS5eG5JJz\\\/KUyxV9CKA0ec8JlwhPzNDRKhDVbUbGtgE4eBFRcNJd5z6F95jLTkLmMMXxeUkHItBQygXNzJZzG8XXc9bBdD5tGTMc48SXuddO7Jji0F5pC3CzTYtN3ud2mYW6PKcI9ZzLrB5TSshDRStkB5ahmLSwJEZVmkqsMau7W5LSCEFkGGcOum6bCE2QmIklewnmkPJIlzSKl0iKiSZeQFZLsIsnSQlIr3Sc9Lv2SvEM+IselvxNzFsmWFkibpBulJ4hIvWhfcOKDJlTchJiGqdfHjnuwShpxfPS343tBsfncm1\\\/Vcc+eqaGnLhprfQlataFktFHLFIX9rv1e7nwBrxXeFojTkWmNi0PJdhqt2JDJnbWH7mZ6vE9DRs3tSy1KbUntTR1KFVLttqkeNeXcIF+P8c+GLezmBDWvZ\\\/4GAkgjSPf7Ewns00aMfif+HY5bsuWx1Xcvuuy15x\\\/as2HupfPKhoUD7rT392wb63QkjP+WfyHaUrC6uqHDqsDATbEucRpEOAkoG+Lfq25I3ZZ2H7rP9YD7AY+4yX6VZ6N6g3JD3I32G13bk01iqpyZlOxKdaUlZl7uuQKZBhBukjpAtJuTNk\\\/brO6Qtju2J92g3ivdZ77L8WNpn\\\/tl99tuR3lyo6NT6lSuQJth+8EXoEvQOsRnuNOzsjLcEuJEEkiBYCdrjFzwVGBxer5MqMTgjE\\\/G8FLNxr0ly4GALzGL1O\\\/JxU5Dmk4qTbUoV8ttye3NHcodzhXV3JO5JNeXNWzBNovPUmTh6BFrNGfLi5Oh0cTZ6dg4REKo6tSJoH08CqdtfZ+ihg8yXg9REaTmTLdHAqFmiRNRO3K4JDGTyZoFSBC6lweyyt1CcddQ11wt7ulde6I\\\/jV4NZ935uA5vKcuOHqioOPrUU3\\\/4wxNaxcrmpd89sKjgDZdfurIK34I78Fp8a3R99N6f7erW5v7syug\\\/zoxHY7GEWWk\\\/LqGx54LYn\\\/m\\\/gmbycEQ7b79jLHVf9st5PBx5EuDIk+ANhoVw9oC4yTqQ\\\/Y7lbb+lSVketzy9yd9hWeNcm9aZvTZvY+oNqXelWZx+updM84VoqYUTk0IXpl\\\/ofz79eT+\\\/Pn29\\\/+r0q\\\/1\\\/SP+DXwwqudaM9Ax\\\/hTXkr1fqrTXpc\\\/2XWcP+zdYr0rdbd6Q\\\/rDxifTQ9HoIKq5gu+hOVRKs7XUr3K1Yee1Z4tUQ11OPFPd7dXuI9QMIoGdasBQLdZJyc7+LQPEwX8fwkNUTv9BpwC96Fh3EEH8Im\\\/D+8llRh5zGfnyt7P4t5sEeL94Q89VJWIKkA9GmP2Im9Hn\\\/m0BdLYv6vjZVSv7RxL9JmNLGz8CL7aSiDffQEtj54qjl4TC\\\/7gsdAufpCZ+FAOsgjOXW2n27revmnkfiKdBAPFPD02oiTPh3WbM4Kq+qsUFiy0bqPtDgL1FkrFC9NLHw8+2kyFmh8JruCY0uS\\\/pSFpp8NrCUxweVx82z90vPgAqwm7d52623nXRDa\\\/z8t27Z+9mPswh4peiT+qquunl+YNwNHXh+8KYaei34SfRu\\\/n3LbjZsvDM1PdhbMWrH5p70vrvnrL6zr28rSK0KZhWu6Du7c8t7lGFP7yQNPtZ\\\/dD\\\/Vp\\\/kK5iC8SGuReeUjeJUsiFkgmzxEJmWSPJ4nfSncVnK8poqTiIrSVeiR4dHBxDaSXDJFdhCeJpvEnDKlf2LiXgNTZuWq8ErLacM0xw1NVskgV3GgZPVXhD6IL+Zuji\\\/gXvvzyH7OBKwkhaSeLfn6gOYNcUFTNpWYeidisJc0MQYQ2NAolN6UcSSyDvey4JtO7pkTILBNPiD4J1KovdaeGeBUyCQIS0ZKEEuQclClLHyvHLV\\\/If1e+sAivCK8pr1jeRW9B\\\/PO25RP0oSw\\\/zv9AeFz5keUZflR4RnnK8iovF\\\/DpQqGiWu7nbxfuV+60mF4w84I6FisaFSG0GYuVaJdwyKIijhAVIxdIWoHzS4lZcZnNiixKcHKVXSaTzJstFiMIMosQ+cBplbdwgmKWZJNokiSBRtuwR7BwCJniQAmFEO2M4SJNUcWD5oNaIQ0J4dGi0tszghOtExdkSYkLx5uTvOPjSYnjzd6JOzI9trEbP2wPh38OliMHDXkWTo15zi3AdqnWaMBj7Is0W99M78cg3olPo+EtDkcfwoXvYwusXfwHnBt9IPpy9L3o+7BFOrjPzsDBBeKfef8YA+OZH\\\/uIL+BnIz8qwYu0DinJlCKkupMWJM9LmZ\\\/5O\\\/sHDnl6Yl3iRYE1iWsDNwS+m3h70sNJ+5NfSXo12SKK1gS3mOjOEnMSmhI3khvIw+JT4sui5bnQO3aSmlFS7MizZmjBglCGlp4NWWJqqCfjTAbJqEulHqYozhY6LxWjVHtqJPXvqXxqah4uRRrU0nt\\\/gpanaSmOqjQt2Q6ZNymUNkYGnuIli1XJozsLtLESmlkJGHmAoWku87TigClHzrY2+Sy7LQRCzxhEn1qcO2RJWhzCoRaw7luKQEylOWmrPPgDD17sWeXp8XCexNLO6onzHHio9Sea6XEpqD8do+c7iFuDsHwgBGN+i11SBE\\\/Qm0rQIxdn11fV+mbqXbLAl5SA9+Bcbk8a255EfzpzMeVwWmc7E6aBQYKLbk9QWYbDseCvX392rJ5Lzox+YrZL3LwfNv\\\/w4Ir7v\\\/vzCxp66pfhS6d\\\/klHeWHNBbandTP5YcN8dTdufjo7ddP0FKeWJprq6kRtX3lyfkqmmXFg7K\\\/prZ4k3q3LWipJAeUaYRkTbQNd3sIgoBX1vP3LGvtSKzRXlyecnE+cKcYWywr3C25TyhSSW8bOss+LLkmv5emt9fG3yHdK9smKJA9tGSSDiEUFyUUnHm802pHjSTEm90\\\/A0ew7hArYxnKNZcC8aot4\\\/tUqX5vrKhSfGK\\\/+8CCIlPU6CfZyek2H\\\/xs1wnDSvEdcoa9xrvJ0pQjPEd+zkDLJzwl4OEstKiAc\\\/rLtpkNk2nHjNyAvR6Pj+i\\\/dqztD8zc3XXrc2fAOc307eET0e\\\/Xv0ZPTdi5seILk\\\/Wty7+\\\/F9D36P+tjlMPcqsPNE9AftwkZbk7PJ3WHrdHa6r\\\/JuTryb3G152f6y97f2t70fix+bPo7\\\/OOFLMX5G\\\/IyEBc4F7jpvk6XTIs10lrvLvdxGYaNtm3CDbXvio85H3Pud+9xyHLO\\\/5BAtn3K6QnGlVlqTOC1kNeIj6wHMIwVk5nSYkQaoSAM8VLoLrPAA+CYemlSPhGktTkOFVgpY0xbD4SspWUpzJSY1Vp\\\/9fql54YkgBET0sqj5WFC\\\/vjxGHQO1OpCpcS3kYt8uCaL+pRMCW+SLo3+Ja1vcedXWyxvWJGBX8NSvPo7+BbtPvPAh+bRk6bLbHjv4wMU9hT97AQcwD6emzEeo3VSD7LJAdi6Ugn+wH9nBburMFXCet95lf1R4RHlGfsY6lmQyufA8cr5Ypyye9qh1n7gv6RXlVcvbyhHLl9IXVmuKLSVBS04NJWhxjpAt4bmE1xO4BCadaVWshON8whi5WbPY4pwNcS1xJM7rpJHIvsTkEC51shvhVFW\\\/GU7P0ctgvl56U1ip2cB5DNOvnO3A9ionRJ4Do7zZ6aXWmmGWUBouTNCFWjht1bSeabun8dNsaSbNaguZElONtR8854r4BAQimsurZbuqvNo0G2TgcLzUM7E4omqcBSpOYAIwWMgLSE7DMdFyZAL1lOGyGQGCBmcFZXrEQ4vIqKzMZo\\\/VaVXMqTcdoy6lmQ0fp4GU4uigcXT4OA2ExRx\\\/E\\\/uaBcIl2EdK2cUTrB5MVa5CMEN1jrg0FuLE6xGNh3yFvdM\\\/3hP9y\\\/Wd2PXmCewUxzXumtY5K7O4TSsuqazEeEnhfQ8+ddv7EO0Fo69ED161cx5ed8XWuXP76TrygkH8GWJdNxrTSqbzOJdX7aqjiR\\\/yCib+OS9JcDuIy+l2xMXbkD0uHiM7cckmmxmvMsfg0EsVoYjYYXPjmBu76eM0O\\\/R7EroW412KXFoFB9AGOFdn2wsdqxzEMYZ5zRoXHyCuVWjYfchN3NQmZEvInejZtJ906t9WBsHF0G+szzRDkJN4DHnBydDbY0hVkFWU2OBjOOb4UhbllcCRga6ShNIEP7gbv\\\/eBinsHN\\\/UH5s4+r+zXv44ef4APNNxw3dKMl+wVF9a\\\/f+Zpbj5dC8uiF\\\/ItbL8sxCVay8bUbanEabH2Ft9gHSrmVewnfq4Il5JSTsNzyVyuydbkaspckbMCVPWl48t4xyxrqXtWdmkehO3u+uyavJOWcY9yC+xPZovVnGuxZsW5PQn5VgsEnt4Mav9PMftnZh7nYCYyarboZXaubv7+TL0sDunLQE5IZpvcKoF6a58tixZxSj4VtzlB8iaKuTnmQJKXOms5MTEp6dZiXIzH8JimoNKMNGdiUWOl4W1OnaBeGw65J+zjxyZc9\\\/gp41x+LHj2OEaTZLJPuPX14NetnbZOV2fm2pw1wc5CkXp2j+D2TGx2ZeCXDCP1lKU5XHHEr8LuGO866+o342pTavaK7vLMeOuWQ29ftRrj534+hKXZvc\\\/cGv3rH89c27L2lhs7wtfWZc1ImJbmLvZfev8TT936G2zGST+588z5zx64rHL\\\/LXHk2h9\\\/78Hv\\\/2j4eyCS70Ks3QR7oBuNaEEb9uEKqiz7HDzH8Xv8dyxLglvIII2ODoeAMYl3OZzxnItgGxVdKifJiuJKUNwImZWASdbUjNAeGcdkLCex9wTc6RmhXd5hL+n1nvSSz7zYi1wBdwJzTYA7nIBPJuCERE+VLl445xhffQB02nhi0TkNEU+ATD0spjBV6m8RYLopTiMJYK4h5uJFCuLHbzzY+sDi1Ohx9cLz6rpLo8dhK\\\/xw97zeG28dv40UP7KyrGb7DeOfwqTBftlbFuw2XEIb9yOZ3n87lCpNbpDJkByRD8mH5c9kwSe3yFvlYagQOFFCAs\\\/ZENbYrTeHmiEOEAVR4hUiwT7BLC4tI8Qnmox5nZ1HFVuCZ6\\\/sYQH2BSe+Lr9d\\\/7qc34f56Jl\\\/LOAD\\\/3gXNLQdNLSKfQfxB3qT9f6o1cHu37SrEvNDEmfn4sUseY24R3lOeVX+pfKuoizlWjhilbxynXiRaYMo7JM\\\/4E\\\/wZ\\\/jPRWGRtMi0RryKv4m\\\/n39AuE+8T7rPpPh4pxjkg0KumCvlmgqt9Xy9oEzewisyJ\\\/JmgRfpyzT0jl3hFMXMj5EuLUkoNFX4JCyFrcQcwEMI0y+HEi1VVxpBI7tht59e74V1Q4P7iTt2\\\/SqT3qXrqoToHfU1698QTNxHb8eJeD5eGb0TXx99I\\\/r5tRCsn8Ybot8ZvxS\\\/vz36xMQbMkx3S9k3GVoO1ZzQIJAhISIcEg4Ln+lfX2wVhqFCgAlwEHRwAYwmdIQS+W\\\/oyNCK8UKN8W3FFoTEe8DPZeFZ+1EOUDfDWLCvWBJEtyXEhUwhb8hfQ2pNtd4av0XlCnOWyi05Qzm7c34oPiI9bHlKfMoSyTmcczQnDuUU5jRAw3M5H+SIOVpSSqgKnodYoyCl8VJSKt0IRhQpje0HvGR3OLKSU1ICWQoYms0ecDq0lWUtDtwDZjNG6jRbUnIgNQXqelJwSwpOgbonMwOBLHBhOSMIZbGwQq6ipTYd+M4C1CytGlIlpIysUJY287xQYdbrWR9kcbYsX9ZQFoey1KyirFgWn5WY\\\/afKiUOAcV2g+7\\\/K07CDwyZzen1zsPLsQmXnOf1mauI7+74g3WhwMD4tgR4BPOwg4HGzhZs1uXDPruEtmNt5aM1dRXUPXTL4UDas5NSsC2d1FESPT6uaXt2RHz3OB2778bLly5etuqTmnvEmsur7BZXzdt4VJaTu\\\/pV5ddfdO35G\\\/76CbwKdudFuzSvFe+JXmjpM\\\/BiPQVv2GlON7WO7IDJH5pDirKLFbIZDMcEBN2KODOEYdPLPHJliDljiqHytVsukP7Pgk7BznevPmKS+4dL0ZXCCfZW5nr5INMWBMSGBW+ObosczLqyYPxAEtyDsfLP5vsU+Mu2J8IyG60aiPj7wwJNzO667knqxJRCR3gcztUI8f7c27yN83PRF\\\/BcJ\\\/CvkI4E4E4VEmTTZV8SvcDd57yb3iPeY7raMyb8hvxPek39jOS4cFz+y2h8x\\\/ZL8l\\\/ii6WWLMGjaLl5n4hzMCs0eKiIXL7kqpKSW5N5kkhyXhs4JwPVjDHv1Z3Kvkzvta5xr3J1eHtONDjfHh5wwLZTggiNMRiBzyq62ZMf4A\\\/+LQ9HXPv1u9IsdWL2ru\\\/vOO7u77yLpN2FxR\\\/SVz\\\/43+uJ1sUe\\\/\\\/+ijww88+iid787oOv5umK8dTm73aQUz4ufFE2eIq7BWxIeSa7j51vnxNcl\\\/T5bpKa7JqZ\\\/jTkt\\\/TzbB+pl6YnObzXZb3MSJzZETF2cL2O102Wjmr5\\\/ZFp6oBEXaj33j1MZ2Irq701Nbp1M\\\/t7HdnZo7nbNxbHOk4Smz3onF0p9eth+T6Jn9jbcuBhW7b1mz+pob2tbeCKptaI\\\/+PjoePR19p275+Mfc\\\/tHHvzf6yEO7wSC3IcSVs7k\\\/qmXfLWA5Di8V1giDAlfobIzriOt18opMb5HJrZaYhVRZFluIZYxs1HIkCeybI6KSjWS7XCT3yryctNW520lWObc69zgPO3mnHQXo7Q3Mn5AhPEyvbxxV+3EKmji4Tprz6ebEhXpgCZIA664o0UWxHtVHPEvrI2XsDZ2SGU3sPTldEnqIKTrwMLXouZfXtDRddP55s5YU8oG7L68p+7yg+rHo\\\/8Ici8Ce7TDHXNKtfV90iH5Tlsfh8d\\\/jvMd1d9adubLkqnMR5zPW\\\/XGvpH3o\\\/9J6Ol3MsS63hq13mu92PpK+3yJV+7WMmsDa9PbANuc21w3p12bI5YFasc68wLrYVpc2J11Kz8gKlFvK0srSy\\\/xlGZKoCA45zWvNsqSnp\\\/uljHQtr9+yybU5YUPOYO6NCdfl3pdwZ+6T6U\\\/6rUP4Vs9N3ntzf5wbyRPTx2K\\\/pHFnmlGmsyvrDPp8dNSXoT8nJrFnLRmAy614enpd+j3WO9JfSn8rXUxLt1h5PgkZkS0qpTHuqCe\\\/ChuHIPacnhlit9CpsFsgrN9D8y14CJ\\\/EHMJ2divNM8x4N2BirPUiHq\\\/iT\\\/KEr8s2uzXo2l3q0aBfjwaderSy8pCH3kV5tMwcyKBfm8fHrn14z\\\/IkDfydLQk3JMWSSFJdvORJc2tp\\\/pBbS\\\/GFfG78AZxVSk1pDZm3ZpJMzZsaykzKY1+AwubSkIeL8nBhHs6bllZkx\\\/ZSOL8bG5D+NpNSpW+\\\/shW23+CmMWpZZ2BTYRdMhqNkL4nR7YZeiTezO3EjwKaP9C2lPv2RhtsTV3\\\/6eWY9fJr1tyYyYq9pstlZZcuGDDTw6T5rhcVlqaDgiIXein+y11yBjK\\\/Em8B36fffEIzDtpSVwe6\\\/6U419fqb\\\/soFvbcqwknO7rau8kxXwvzoExdveffDd9\\\/Kjn7hWNXYU6SmBPDzTY2nPntnHBcGlyzPTilUE1yO+tkr7t3x7C07i2fP8bn90xJS1iyov+G7v46AxftiH5HbhO+B\\\/\\\/6VlqMiODgpObaZcQvimmxSYgLycu4E5HHGu7DHSVzYy8mSIlm8VNE25Bn2RDxcCxSHPJwHDogjCZi6t1GUQN92HtDiLGa5UClEcEZbBSuaHiGzvVzA41yeUOXa7drj4lpcQ65drsOuky4Buewu1VXk4l2JSZuGJzb++kg5rOlZ7AVFV+wQvUI\\\/o9+g20+x8+UJ9pY0oB6DLd9RapwvmzEcJl1Mph4qNPqVgsNfVlqW6SBXHDJnpWQt8K7+zgVXVJjlq6\\\/GSXzgaHTZNcGU5HdzSy+sLb4Tv370zR9Gt4N8bgaPsJQPwF7+gOa5yLHWcZfAyWKiWEkqHfWk3nGcSOxM4uDNbqQkuODoDOfnQEICos4szs12dP2Q\\\/S92dNk0uZWb8EkTNv3zo4m+HXxtJ29OK2N3mjDJNH3a06dTkFs082Dn5Y9dgBN9S6rm9eXixN3LV1\\\/62F1kOOo9Gp61ePAYPgTBPszTAjFLC8zTjIe0ndnSqzy5R9qP38O\\\/kU5aBZOUxHvFbLEczTDNw034O3hQUgI4KE3HM6U6vEC6x\\\/yl+KUkZ\\\/IBKVcJ8TOVufwi5UXedIGyjG9S2vkuZRO+SrmDv0s6oPyGf085o1g5XoJA382rfK5SylcpdbycwCcqM5VFyuXKI\\\/zT\\\/GvKaZ6+JHFy1OkNweHmyGiCh5ZHtQSLI4R5ReLpdwRQmJBsoq8IHN2Xkx+KsRdDjmo2d0aICxDZRYgsiGaz0XzSjCmoeaDZHECCCyFBFATYnUyybEZwUO8aEUtlesowm8KLrbutR62claPVpNRMq50n9Yst\\\/YX4sOUlsNVEZqzsdZ7EhZMv9hROvthD354Irp\\\/4+kCHJk7sHvoFapC+97i+D9OsFM4h8fH0NMJxFrw1ehu+6NmX8YLoPXh79JEj7xI\\\/4aLv4YyoPP4Gnh99mmovHfbmt0F7dpz9pPM1HoNHjmnFdkdIwZBJ2KSQL\\\/CXCik3n6+cb2nEjaQTd5KtTtMH\\\/GHLZ\\\/xRC68U8g9Kz5ABZEIKXgZOUjaJuNDyIDNum92OlFv53eDU1UABKAEHn5SVUrvN8K829m4+dbA2u021Fdk021abaEvSnPgQ7O7EKZlK0ZBlFw0IQPYy9CFZPPQJB0cw\\\/idu2gJu2rHpygk3TUOA5mCf\\\/RQsBvr+Ba05VXki2Ee\\\/yhn\\\/\\\/Bh965yW2HjVH5wz1l+6JLGTmmKuMNstkKzM7zah0jI8vVyUhLK0BCxNL01LSMe3rC4sbohu57qjl906mIJHf4df6y3kMPn4lWje\\\/dIXSP+FdPLGp1ctOXVyla3yc1Oiif2m4UN\\\/qmS\\\/Qf7UeSOvf\\\/XVmXF7rWk14MqTv5kPuTQ7ugjNtaOvvopeaK\\\/9xq+254lQRSqg+8dQP5S38\\\/1oBaSHIF0Eda8Jr4ClvoLugtQqrEB38n9Cd4sVaDWtA\\\/yboLxXfAzdBuU9tB3amqBcAHh50s1Ign7mA7wNyuWQqqFPLzwvg\\\/RdY7zttJRS0Raouw3SEkg7uVRGUwT4Pni+GWALj6jFsc86Ix2A9CVM9AzMAM6s3ExId4BPicL5dQ3M\\\/vsImS6BBDjKbDjPOyHdh5D1AoRsIYQcCiRwRPEDCCU8iZB7AULeIoSSUhBK9iKUsgyhaS0I+SClqTA8TS8g5H8PoYx5CGXCuIE\\\/w5HzbYSyf41Qzj4QKYTs+a8iVBBBqKib\\\/q0GJvU89FdUidqQAFG2HRWiauBwoX0dHNHpbwis4q9A9Ld22C+Qspxj+lPwbAMmyCT83oA51CgcMmAeuYRfG7CAvMJHBiwir+g1YAm9JBYZsAkFpCEDltEO66MGrPAvsJEpbEar40oM2ILWxN1hwFbxSfGUAcehS+K+mrSnrbYVkzYn2D43YIJ454TNcSjPOd2AeaQ4qwxYQBbnAgMWAV5twBJa7ew2YBOKj3cbsIxq3bkGrJBW228M2IyK3T2Tf5Gi1D1swFZupfOwAcehAvebwAnmqdTjPFYD5lGSBzOYakfxZBkwj9yeZAaLUC96zjNgHjk9xQyWqF48iw0YdOGZy2AT1Fs8bQbMI6\\\/nIgbLhn51WNevDuv61WFdvzqs61eHdf3qsK5fHdb1q8O6fnVY168O6\\\/rVYV2\\\/OqzrV4d1\\\/eqwrl8KK0xWVxowlVUPg81Q7\\\/TcacA8mubZzmALk8moAVOZPMLgOGr5njcMmEcpnp8z2M76GTVg2o+OH89kfsKAqcz\\\/wGAX4ydmwJSfvzE4Aepd3kQD5pHq1fXrpvjeCgMGfG8+gxMZ\\\/lIDpvjnMziZ2oC334DBBrxrGZzK+FlswJQfXdc+hr\\\/dgCn+VQzOoDbg3W3AYAPe2xmcS+XjfdqAQT7exxmcz\\\/r5pQHTfp6jsGmK\\\/E1T5G+aMi\\\/TlHlZpuBbpuBbpujFMqGXZWgz6kVhtAa1gm8KQ3TxY0jLUAeDF6Ie1A1pwMBS0Vx46gOY5q1Q38kwVKhZB\\\/QFANWw+tb\\\/y54KJzlT0VJoWYcGJ3H6oW4+lPp4xagCfopQvgGVsNpqoFgH5RKgWQs8DDCqJdBfP6Q+tAHydsZDN7SFUdckJ30wrgpYrcZIOn4nSEgFCkpPe+wGf05HoS2tbKQ2oy\\\/6t0t0yi7WI51BB3DfxXrshJYBht3BxqJSHzBG6GczbGO0A6y9m\\\/VCS8pTD+Oh05hLL+ubctTGuOpno9EWit\\\/OSp3\\\/QTaaykaYylUn638A2rvZ80bWd4cxetjA7WF96WNP1K9jfQ8YEmmDJ10yX8cbgD7DTCqdUOp9txk1g0zSVFdnraSH6aWPSXQdo6ecUuvoMqgmRmhj9BuMUTuNmdI2XZpnpbAGMGlveu1ZuXYa0u0xZtLJ8AfZ01mt9jOLXce4+3abmFg5\\\/ZNzoW1drL+zffTBOJcb3LYa8m9jNq0adj8hs3Y29lpWq9NvhJZOQ4cUZx3oXreRHsjXQtsGQ9p6D2fXcivTlW4dKpNhmzH\\\/Tqa1dQynl60z3Rq7GaU+k6nW3TlpWSq0bzI008W4obap663fWMnrJvnoYk9nrXfga\\\/6m\\\/2vzazPGWM16GGSSbj\\\/HNsNoPdRPSJbadtvkDNcw21aZDWxisu1ndjfAtLF2UuuUd32907WUN7ma+g0rO+uP9NYuppFWdAWj17mm\\\/bax1rOWpo\\\/ezqTVy1bJ5slZTIxN6Tey9lYmiT5jDLqGdCkOMPoJjid672U21MV86ARvBd\\\/wqzPP0doc5jnboXaFMdKEl6VecgbkKsqGPqj0+9hK0FdQzpRe8id7WQi2fbb+p8zW+4y138Xs5\\\/JJPf+f+n1dN2sNbxg2fNxZX6X3uhz2BBU1MHoVBdh4CyFfDGOvYdY7ITVqn\\\/1M4h1GbwVoEeAtgx2kDtJcmBGFF0Mtpa+D\\\/AJWXws1SyGn6+B82Dlq4Wchq12GrEhhaRmz3P5vsWt1sl7nWNder6Hfs+vhm\\\/LR970ekEEfs5AOhj0xnwnvP2FTq1nrZsAfnByzbdKP6rIbZLRn\\\/V\\\/YWCHUS5312bqv6DT8c7\\\/hP9ayXsKT\\\/pfKtskYjXqSDYbfXj258+ljDvwLyUxY2cZJTxg2Vnd4cv30MV81YPiONYbtf5u8JlY8lVh4Si9nPcY3x2s37Iva8mrmhXWuVxua6TZ6\\\/jYNZbFZnSsp3ft\\\/0yq+OfKEH6Ues5VFNa0w6jpD2v2Gv\\\/pnYxcw2++e4tM3f0MXYSOimbpy9J2ilXHUyyRL965Ott7+vc5Vwxa7p\\\/jRiXHp6m9nku6csmP1TYm68iax+6bY7dk44V9LinLXxfqfsKuec\\\/rbyPR\\\/OdPmVG8y4YvPYvYAru5nBpnEaf8dk\\\/PR+Zpq3V2G99blr6+qXsM+znr5c23oX83orH3MZ3P\\\/puYm4jy6v4WNaFCfjR5btjGtdn9NB31fk\\\/fZnun8elj002741Q0sDtuIpkZy\\\/177E\\\/3pazJsxBvn7soT\\\/X1Tj7q0zkbHbazPb67jCY21fk3Wa\\\/4jbs9K+ZsjnBtbnMtR2IiYB2CvnOiB7jLVUJuP6C45A4VQOeyMKuTF8JQPZ44QpCJEz9nLUb2BWQStxdASMuByVAqJUk1HZXA+oYn23sHikl4YrxB+NrKfAra\\\/n7vi25jn+2f7BIVq2OrcOGkX+i7YaXhbytMS5qH1PXSREWv1GFE8XZ\\\/6TtrHWjqZBpZCfnbfoFZFT1c0YvjP+C5k+F0wViHkA8xDUF0Vsr1nFbMSPZ4omMT8fzvCRhYD6Ljh\\\/yejTLQVfs0eJ\\\/tetrk3vKa1Laz+WF3WEVYX9nT3DECVOrenr7enr3Wgs6db7V3XVqDWtA60\\\/hukQtqZurRn3SCt6VfndwNdcUVFUT5kJQVq9bp16pLOtR0D\\\/eqScH+4b0O4fW5P90C4i3bSt1ntbwUiqO9co7aH+zvXduep1X2drevUNsBq7YTGrp6+sNox2NXa3dk\\\/oLZ1tPa1tg0AQf9AZ1u\\\/OtDR2q1C22a1Z43aCaP09oXbw23h\\\/v6evn61tbtdbYX+B9s61E6jq85udWCwO6xu7BzoAPIw1Pa0U2oKr2uFMYC+FZiZqBvYGO4e6AwDdhsAg32bC1Qmkp4N4b5WmN5AX7h1oAuaKEHbIEyxnw7W37MG2GQsrBlctw5AxisM39UDg3R2tw\\\/2D7Cp9g9sXheeKgmqnH46Srivq7ObYfT1XA7dtgL\\\/bYMwUDfjrL2zdW0Pbd\\\/Y0Qkz7Aiv6wWJ9KhrOzeEGQLTcqu6DsShdoVBdt2dbYDe2tsbBjF2t4VhEF3cnVRYangTTKYrvG6zCnPrByWvo310da5j4h0w7KbfGK8NKFaH1cH+cLsuzfD6QcrsYBuVv7qmB6YMPcKkBgY6u9fSqfeFQe8D\\\/XlUTf0gMmZH8NjVurb1is5u6Do80JanCw3I2zv7e9e1bqZDUOru8Mb+3tZeYA1Q2oHFgc5+2jFF7+3r6ephvRVM2OpMfWpzeta1z1wBRNRkSwpmlKjZCzvb+nqognIYSj5FWbiMwY+qy\\\/pA+12tfZfTOf8r24fZrAUzDIPFMasC1OVL1YbWATWgLluoLl6zpoCxFl7XH97YAWgFixYvm183f271svmLF6mL69QL5s+tXbS0Vq0+f0lt7cLaRcusilVZ1gHKmJA1VQztGKYH8x5gepjkB9Zez9q+1t6OzWwcav5UUqs3q5t7BillG7VR4G6wu53ZH1gFmBSzbLCKTrBnQG9d2xcOU\\\/stUJuArKMVjKdnNV18QDlwDjNUZBupEYZB3WGqn75w2wBYxxqQ\\\/lm+qOJ71oYZCjOMSTpQKNj86sEB6BrY7IF1OGVCWf0TTIH5T4pikpjaqLqhdd1g62qwy9Z+sKup1AXq8m5m6ZsnZgFzMpQDi6JV7e8Nt3Wu6Wz75sxVkGI3s1FK29re3kl1DLbTx1xXHq3uY7JlPuFrTK3r7OqkE4JBGN7Gnr7L+3XTZlbMKns2gs0Mrl7X2d9Bx4G+dHF3gXkD\\\/6Cq3s2qbvKGhM4diMlj\\\/pqzk6M+b\\\/1guJ8NA96yLdzXbcygz+CbIfd39Ayuawdb3dAZ3qg7uW9Mn+KBJsPgN9rPOsbJOQJbzB23DZzVMZ1Yq8H1mm\\\/vlrE8SWB4C6MjGKd1YCZFWL60Ws1Xs2eEynPU8uIZ+UWhoiJZXl4PlUXFxaEQ5OWl5Wr59LKKsgqr0jEw0DuzsHDjxo0FXROKb+vpmromwmpNX+tGKgtYgsAU9LSkZzWs0EXgtXrAxefRRdrX2dbZqi5tZWujH\\\/asGSX\\\/pO\\\/CjoGudYVdA\\\/RvkBd29a9qpX6igFb+\\\/yTYGF4HteF\\\/T0KfCg05MuxzrksWsauHPnYEaz2nZQANYits8x+fU7uGhY1Ta+qM66YpddyN3EHuJe45yPd+62id3xjtAoD0Y0EPax08p\\\/V8Fu5NHBXpgehcDj6G8nJ0Gqg\\\/hvqpbSsYxdSaeazcwGZybkuDcQUxyALHHnY0+Wfcn8MB7+Nn87P4ufx0fgav8efx9XzFOZTLvlWW9bTExVB\\\/bq1+VXf5uWNgB\\\/oj54dQ61yp9RiXp8b3qCiWRf9+\\\/Tc\\\/B7n7kA3Tl5AOcfeM2l0l2hh376gtvkSrtnN3ogZIBEW4hegQJIJ6uNvQVkgE0OtH8otL9lNgVIkrsQP+TlDxTjQEiUPDkGP2rEGi+DtH4920+2tHbA5Gd+VIUUgHRu3ekoZqF7cJYS7MdSM\\\/8nFboJwGZRuUqVCu5trhsED51EZt9pIhGK8K0Ku4BDiJ+Lhqzg0RuY+r4ZJQMkMbHInTxxkcyc4tqVa4uZyXodg4KxxJfJyJk0ZKfOoznAacatyNo7KZ8nfjiD2h5CB3PSchF2ANAZbHZzvIKagQEp3JslHZWrKr2sItg2kuA7H4OPr17G6Wa1z3CHQE49VyKcgNbZdzqSgByjpu2kiC79Az3O0M7bu0Fxhv9oiplBaj1riSQ9UyR3\\\/jOMLdAhK\\\/hY22azQwowRVB7hsVASJgFC3AkR\\\/39nO7QBoB6hpB6hmB6hmB3Cxg\\\/5HAtx2aNkOOIXcFaiX24h2QdoNMA9dJoyABPczICO7ZD+XyHlBEvZnQHYYapNG5TjKmXfEGc\\\/QvKOWuJKqg1w\\\/WgyJAPMDox5vSc8zXC6bSt6oN5kS9I7IFhCdR9cFELqpDg5yKdw0JolUJoFItQ+eMbJxPoTJL8hhKh3yJvkN1S\\\/9Y+qs\\\/KVR\\\/soo\\\/1svY4fI4VEYRRsjv6bl0eoU8iH9BR\\\/yPtoNECHPkBfhtOkj75IxygV5h+xHVVAeged2KPdDWQrlgZG0V31jZGwUCuD9\\\/hGrm06WvDgSLDQAX6YBeJINwOkuqc4kL5DnUQp08VsoM6B8nhxC6VA+B6UXykNkAL0K5VOkDM2C8kmjfIk8S22aPE32wQHSR0ZH4igLkRGJFntGRFr8dATpTw2FvmfJT8njKAlQfzISSILaR0cDGT7bM9AfJj8iAyOpPme1Qh7EjfgUIA2jI7RETvLQSDntZNfIs6pvP9lFdmneci1Ty9ce5ooyi\\\/KLHubUTNirytWH1Wo7uQUJIDxYsGQn5HBEJ2A9kDRIu8j2Eb48Uj0Oc6LzImgI8mEGtUDeyyAEuX2y9SSDqsj1aDEkAn1sgbQV0hCkqxEP+RWQroT0HUhXsZoBSIOQNoL76AWKXqDoBYpeRtELFL1A0QsUvYyil40+CIlStABFC1C0AEULo2gBihagaAGKFkZB+W0BihZG0QAUDUDRABQNjKIBKBqAogEoGhhFA1A0AEUDo9CAQgMKDSg0RqEBhQYUGlBojEIDCg0oNEZRBBRFQFEEFEWMoggoioCiCCiKGEURUBQBRRGjUIFCBQoVKFRGoQKFChQqUKiMQgUKFShURmEHCjtQ2IHCzijsQGEHCjtQ2BmFnelnEBKlOAoUR4HiKFAcZRRHgeIoUBwFiqOM4ihQHAWKo2TjXu5w9c+B5DCQHAaSw4zkMJAcBpLDQHKYkRwGksNActiY+gATBgGz2QJpK6QhSJT2ENAeAtpDQHuI0R5i5jUIidJGgCICFBGgiDCKCFBEgCICFBFGEQGKCFBEGMUwUAwDxTBQDDOKYaAYBophoBhmFMPMcAchUYr\\\/3Cj\\\/Y9WQq3GjCTZXMoRzWLkVfcrKLegIK69Ce1n5HfQwK69E17DyClTOyo0owEroj5UDyGfCI75yW7UbXMBiSKsg9UDaDWkPpOcgSQx6HdIHkGKkTEvnbdJiabe0R3pOEvZIRyViExeLu8U94nOisEc8KhK1OplYmR8F14JuZflWyD+DBJsI5FUMqiIhGDcEfrYMfkIkpDlOqJ\\\/l4tdz8XO5eE8uvjUXV8vkfMwzT6eicgKM40bNEpjtOwKpPJA1GzzTLfs+9fhGAtN9Y\\\/hZvcjRglB+CmkvpIchXQOpHFIJpHxImZB8rC4X8Bu1dKPLZyFlQUqDpNIhkNsNsY3TYdL2Eyt+ePTnVkT\\\/1OtIVjbQPTOSVQTF2EjWYiieHsla7auW8T6URcMg\\\/BRo7nEo94z4jkHzT\\\/TiiRHfM1A8OuILQdE8klUAxcUjWb\\\/yVVvxcuTjKekyo1wK86blkhHfCkC7cMSX46OvWWYFKHYuDJQJrTm4ER2DMtOgytBH8o\\\/4ZkGRPuKroNgmlEUVj0WUz9gTINGSGwWGPtuPG3msmX0nfLf7PgXyv4BgwTzeUcd4KF7PHMMrNMX3bP73AbnaN1KtUHzYH\\\/YaZYSWT\\\/keztzuux\\\/6wpn7fPf6Cny35I+ZoPpm4Hs7G2LEd406Rh7X4n1DviLfQP4xX79vga\\\/Vt8TXnAn1I75LfM9SNlETbiSP7\\\/M1QIfzYRaZI77zM8cYi3W+zT7Nl+WrUJ+l8kUz9H7L85+lEkAl+uh5IN\\\/czDFq48vLx7BDy5VOSruki6U50izJL6VL06RUyWVymuymOJPFpJhMJtHEm4gJmVz0vdYgfenOJdLfo0YiT3OewXZCc8LeyUMEmwhagCLxXD2pXzoH10cOtaH61Wrk9FL\\\/GFYuXBkR\\\/HNwxFmP6pfNicwI1o9JsSWR8mB9RGq4uHEvxrc0QW2E3DiG0bLGMRyjVdcn0\\\/8HYC9G19+cvB9hnHj9zU1NyOveUOWtcs52VNTVfEvWYuRT\\\/hyPdyqYGrmrfmlj5LHUpkgJBWKpTfWRq+n\\\/ErCf2Ii1tmY\\\/iaNFU+N+vpfYapfQer63pgnQjjE0sOY4QENZtAA00xykUjTwJ3MoGuhIxwsAOeCl0QLwFCsKMLyAYmV4PKZ4e4+otTV7VZXhZCJ0hOEcyURTcMBigLZmbyDAsPwqbqRYuNGvMsZyWEc+H6Dk+xgKnIF8rCMfZoNFCs+iZBooZZMoZWwsDp\\\/F8ek4ruwJHFc24AT\\\/Lz\\\/hOUE8Wjy45UX6Hy+0+GvDkFoiOzd0eCNDq1V175ZB439kCLSsbuugZWs4MugP10S2+GvUvcUvfkvzi7S52F+zF71Yu6xx74tauGakWCuu9bfWNI1WVTZWnzPW9smxGiu\\\/pbNK2lkjHauq+luaq2lzFR2rmo5VTceq0qrYWLWd1O4bGvea0Bz65yZZOUrMCthwS3Ja0xy3vXc2Nej9s9K8W5IP8Ag\\\/iszBpojFPydihUSb8qvzq2kTrDPaFEf\\\/dw2jybtlVlryAfyo0WSHaod\\\/DpoQLaJI9PfE6iNpS1c2UlOJaK3frrN++mHNXlTbWQP\\\/4HmAJfiZion6v\\\/Uz8G2fwcHBfpoNBvsRqo\\\/kLq2PTKe\\\/tSZJMFRLTRPUFUzUcRyr2yvLtWOxQ9AYBCbwAB2OQkFM\\\/46FpsCpSyLD4rBE6FFhYDQptaTnIOzgWyHBOY5sHClk52WycTQ9k55fBkYLy\\\/QSzqe0HElKK6Ev4JcDKS0z9VJz5AOwK3NX\\\/q7y4czh\\\/OFykf7hh4eh0vcw3UpHCh\\\/m0ECwf0IQAA40If3Pa8B4D46kpLKBhykQDDYF+9mfAUVfF\\\/XEnwcFoU8Ktt\\\/otZ91PzChEL2+H+nIemNwcIJo0CBhjYOMBMD\\\/Dw8Lb6YKZW5kc3RyZWFtCmVuZG9iagoKMTggMCBvYmoKMTgzODUKZW5kb2JqCgoxOSAwIG9iago8PC9Qcm9kdWNlciAoUHJpbmNlIDE1LjMgXCh3d3cucHJpbmNleG1sLmNvbVwpKQovVGl0bGUgKGFuLTAwMDE3KT4+CmVuZG9iagoKMjAgMCBvYmoKPDwvTGVuZ3RoIDE3Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9UeXBlIC9YUmVmCi9TaXplIDIxCi9JbmRleCBbNCAxIDYgMl0KL1cgWzEgMSAxXT4+CnN0cmVhbQp4nGNiZWJiZWBiZQQAAIcAGQplbmRzdHJlYW0KZW5kb2JqCgp4cmVmCjAgNAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAwMDM2MCAwMDAwMCBuIAowMDAwMDAxNDYzIDAwMDAwIG4gCjUgMQowMDAwMDAwMDgwIDAwMDAwIG4gCjggMTMKMDAwMDAwMDM0MCAwMDAwMCBuIAowMDAwMDAwNDE2IDAwMDAwIG4gCjAwMDAwMDE0NDIgMDAwMDAgbiAKMDAwMDAwMTYyOCAwMDAwMCBuIAowMDAwMDIzNTQ0IDAwMDAwIG4gCjAwMDAwMDIzNjMgMDAwMDAgbiAKMDAwMDAwMjU0OCAwMDAwMCBuIAowMDAwMDIzNTIxIDAwMDAwIG4gCjAwMDAwMjQyNTAgMDAwMDAgbiAKMDAwMDAyNDQ0MCAwMDAwMCBuIAowMDAwMDQyOTE1IDAwMDAwIG4gCjAwMDAwNDI5MzggMDAwMDAgbiAKMDAwMDA0MzAyMyAwMDAwMCBuIAoKdHJhaWxlcgo8PC9JbmZvIDE5IDAgUgovU2l6ZSAyMQovUm9vdCAxIDAgUgovSUQgWzwzMENBMUU0RjhFODY0RjdGODlBNDI3ODg4NEFDNkEzRD4gPDMwQ0ExRTRGOEU4NjRGN0Y4OUE0Mjc4ODg0QUM2QTNEPl0+PgpzdGFydHhyZWYKNDMxNjAKJSVFT0YKCnhyZWYKMCAwCgp0cmFpbGVyCjw8L1hSZWZTdG0gNDMwMjMKL1ByZXYgNDMxNjAKL0luZm8gMTkgMCBSCi9TaXplIDIxCi9Sb290IDEgMCBSCi9JRCBbPDMwQ0ExRTRGOEU4NjRGN0Y4OUE0Mjc4ODg0QUM2QTNEPiA8MzBDQTFFNEY4RTg2NEY3Rjg5QTQyNzg4ODRBQzZBM0Q+XT4+CnN0YXJ0eHJlZgo0MzY4NAolJUVPRgo=\"}",
+ "context": []
+}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Taxes/delete-a-tax.json b/tests/Fixtures/Saloon/Taxes/delete-a-tax.json
index 163bcde..78897cd 100644
--- a/tests/Fixtures/Saloon/Taxes/delete-a-tax.json
+++ b/tests/Fixtures/Saloon/Taxes/delete-a-tax.json
@@ -1,25 +1,24 @@
{
- "statusCode": 200,
+ "statusCode": 404,
"headers": {
- "Date": "Mon, 10 Nov 2025 10:31:20 GMT",
+ "Date": "Thu, 27 Nov 2025 10:43:21 GMT",
"Content-Type": "application\/json",
- "Content-Length": "16",
+ "Transfer-Encoding": "chunked",
"Connection": "keep-alive",
- "CF-RAY": "99c4e12d5bcfbe5c-ZRH",
- "x-ratelimit-remaining-minute": "999",
+ "CF-RAY": "9a51062c6ab8e5d9-ZRH",
+ "x-ratelimit-remaining-minute": "998",
"ratelimit-limit": "1000",
- "ratelimit-remaining": "999",
- "ratelimit-reset": "41",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "39",
"x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "alt-svc": "h3=\":443\"; ma=86400",
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "{\"success\":true}",
+ "data": "{\"error_code\":404,\"message\":\"Page not found\"}",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json b/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json
index fd76122..e0e7c25 100644
--- a/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json
+++ b/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes-scoped_active-types_sales_tax.json
@@ -1,22 +1,21 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 10 Nov 2025 11:00:57 GMT",
+ "Date": "Thu, 27 Nov 2025 10:42:48 GMT",
"Content-Type": "application\/json",
"Content-Length": "709",
"Connection": "keep-alive",
- "CF-RAY": "99c50c90eaf49a60-ZRH",
- "ratelimit-reset": "3",
- "x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "996",
+ "CF-RAY": "9a51055b892a3dba-ZRH",
+ "x-ratelimit-remaining-minute": "997",
"ratelimit-limit": "1000",
- "ratelimit-remaining": "996",
+ "ratelimit-remaining": "997",
+ "ratelimit-reset": "12",
+ "x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "alt-svc": "h3=\":443\"; ma=86400",
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
diff --git a/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes.json b/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes.json
index df15218..12bf220 100644
--- a/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes.json
+++ b/tests/Fixtures/Saloon/Taxes/fetch-a-list-of-taxes.json
@@ -1,25 +1,24 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 10 Nov 2025 10:30:54 GMT",
+ "Date": "Thu, 27 Nov 2025 10:43:21 GMT",
"Content-Type": "application\/json",
- "Content-Length": "9808",
+ "Content-Length": "9444",
"Connection": "keep-alive",
- "CF-RAY": "99c4e08ede32b571-ZRH",
- "ratelimit-reset": "6",
+ "CF-RAY": "9a51062a5bdeef5b-ZRH",
"x-ratelimit-remaining-minute": "999",
- "x-ratelimit-limit-minute": "1000",
- "ratelimit-remaining": "999",
"ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "39",
+ "x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "alt-svc": "h3=\":443\"; ma=86400",
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
- "data": "[{\"id\":3,\"uuid\":\"04c42e05-2f56-40fb-9151-23eca07f7120\",\"name\":\"lib.model.tax.ch.sales_export.name\",\"code\":\"UEX\",\"digit\":\"220\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"UEX - Export\\\/Exempt 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":4,\"uuid\":\"e758a27a-f208-434b-b6ad-dacbeac737bf\",\"name\":\"lib.model.tax.ch.sales_abroad.name\",\"code\":\"ULA\",\"digit\":\"221\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"ULA - Leistungen im Ausland 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":5,\"uuid\":\"d78183c9-954e-40e7-9e03-b5dca94ccbbb\",\"name\":\"lib.model.tax.ch.notification_procedure.name\",\"code\":\"MEL\",\"digit\":\"225\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"MEL - Transfer by reporting procedure 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":6,\"uuid\":\"4cf8b2b1-ac3c-466f-b9a5-5fcd076b4355\",\"name\":\"lib.model.tax.ch.sales_not_optimized.name\",\"code\":\"UNO\",\"digit\":\"230\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"UNO - Exempt revenue 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":7,\"uuid\":\"b566d3ff-ce58-4197-b802-e75d59ddc24c\",\"name\":\"lib.model.tax.ch.import_tax_inv_exempt_zero.name\",\"code\":\"V00\",\"digit\":\"000\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"V00 - No VAT 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":8,\"uuid\":\"7c8e24b2-48c9-4504-9dc8-260ef839c718\",\"name\":\"lib.model.tax.ch.sales_0.name\",\"code\":\"U00\",\"digit\":\"000\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"U00 - No VAT 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":9,\"uuid\":\"3935fa57-2b6d-4e00-893d-4e0bde6da035\",\"name\":\"lib.model.tax.ch.import_tax_mat_exempt.name\",\"code\":\"VIM\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"VIM - Import 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":10,\"uuid\":\"97503c3e-fb54-43cd-bc9c-d053efabe79e\",\"name\":\"lib.model.tax.ch.import_tax_mat_dl.name\",\"code\":\"ZOLLM\",\"digit\":\"400\",\"type\":\"pre_customs_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":100,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"ZOLLM - Import Mat\\\/SV 100.00%\",\"start_month\":null,\"end_month\":null},{\"id\":11,\"uuid\":\"ab48d322-f167-4f19-829f-d121419964e6\",\"name\":\"lib.model.tax.ch.import_tax_inv_ba.name\",\"code\":\"ZOLLB\",\"digit\":\"405\",\"type\":\"pre_customs_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":100,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"ZOLLB - Import Inv\\\/BA 100.00%\",\"start_month\":null,\"end_month\":null},{\"id\":12,\"uuid\":\"41605934-f319-429e-b70d-a8d5fed7335b\",\"name\":\"lib.model.tax.ch.sales.subsidies_surtaxes_dumping.name\",\"code\":\"SUB\",\"digit\":\"900\",\"type\":\"non_consideration_sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"SUB - Subsidies, Visitor's tax, Disposal 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":13,\"uuid\":\"df49f025-7165-42b0-a266-ae1aa7d11257\",\"name\":\"lib.model.tax.ch.sales.donation_dividends_indemnity.name\",\"code\":\"SPE\",\"digit\":\"910\",\"type\":\"non_consideration_sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"SPE - Donations, Dividends, Compensation 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":14,\"uuid\":\"c8365961-0a1e-4a89-aeb0-b49112ead4eb\",\"name\":\"lib.model.tax.ch.sales_tax_303.name\",\"code\":\"UN81\",\"digit\":\"303\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"UN81 - Revenue (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":15,\"uuid\":\"b6859ca9-d026-4269-8293-9e01c7603fec\",\"name\":\"lib.model.tax.ch.sales_tax_313.name\",\"code\":\"UR26\",\"digit\":\"313\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"UR26 - Revenue (RS) 2.60%\",\"start_month\":7,\"end_month\":null},{\"id\":16,\"uuid\":\"bf160856-7e11-4fb7-af87-c134771f2e4b\",\"name\":\"lib.model.tax.ch.sales_tax_343.name\",\"code\":\"US38\",\"digit\":\"343\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":3.8,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"US38 - Revenue (SS) 3.80%\",\"start_month\":7,\"end_month\":null},{\"id\":17,\"uuid\":\"6638b197-14ef-4d45-a887-857b45b03775\",\"name\":\"lib.model.tax.ch.opted_sales_tax_205.303.name\",\"code\":\"UO81\",\"digit\":\"205.303\",\"type\":\"opted_sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"UO81 - Opted revenue 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":18,\"uuid\":\"749bd701-3691-4d70-8594-dba77c36d1d5\",\"name\":\"lib.model.tax.ch.pre_regards_tax_investment_383.name\",\"code\":\"BZB81\",\"digit\":\"383\",\"type\":\"pre_regards_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"BZB81 - Service import tax Inv\\\/BA 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":19,\"uuid\":\"90bee346-f5f5-4284-9dc1-4cef2b4ef52d\",\"name\":\"lib.model.tax.ch.pre_regards_tax_material_383.name\",\"code\":\"BZM81\",\"digit\":\"383\",\"type\":\"pre_regards_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"BZM81 - Service import tax Mat\\\/SV 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":20,\"uuid\":\"0ee68582-58bb-4e8e-a485-74de4474a8dc\",\"name\":\"lib.model.tax.ch.pre_tax_material_400_2_6.name\",\"code\":\"VM26\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VM26 - Mat\\\/SV (RS) 2.60%\",\"start_month\":7,\"end_month\":null},{\"id\":21,\"uuid\":\"7e902614-92f9-4727-a14e-6a7e12c76152\",\"name\":\"lib.model.tax.ch.pre_tax_material_400_8_1.name\",\"code\":\"VM81\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VM81 - Mat\\\/SV (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":22,\"uuid\":\"2f8f58dc-8cb2-4d38-a348-a35afbf04386\",\"name\":\"lib.model.tax.ch.pre_tax_material_400_3_8.name\",\"code\":\"VM38\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":3.8,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VM38 - Mat\\\/SV (SS) 3.80%\",\"start_month\":7,\"end_month\":null},{\"id\":23,\"uuid\":\"88256004-e90b-479a-9f0c-83a5bd523d64\",\"name\":\"lib.model.tax.ch.pre_tax_investment_405_2_6.name\",\"code\":\"VB26\",\"digit\":\"405\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VB26 - Inv\\\/BA (RS) 2.60%\",\"start_month\":7,\"end_month\":null},{\"id\":24,\"uuid\":\"f016a926-24bc-48ec-94ee-d65aa64059e1\",\"name\":\"lib.model.tax.ch.pre_tax_investment_405_8_1.name\",\"code\":\"VB81\",\"digit\":\"405\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VB81 - Inv\\\/BA (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":25,\"uuid\":\"7e675761-e569-45dd-99b0-b34a3d0277bc\",\"name\":\"lib.model.tax.ch.pre_tax_investment_405_3_8.name\",\"code\":\"VB38\",\"digit\":\"405\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":3.8,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VB38 - Inv\\\/BA (SS) 3.80%\",\"start_month\":7,\"end_month\":null},{\"id\":26,\"uuid\":\"0b6188c2-314a-4c06-85f3-27f9952321ee\",\"name\":\"lib.model.tax.ch.pre_tax_material_410_8_1.name\",\"code\":\"VES\",\"digit\":\"410\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VES - Deduction of input VAT 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":27,\"uuid\":\"fad3b755-c940-4d73-8954-0bf71c7ecd64\",\"name\":\"lib.model.tax.ch.pre_tax_material_415_8_1.name\",\"code\":\"VEV\",\"digit\":\"415\",\"type\":\"pre_tax_material\",\"account_id\":135,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VEV - Compensation personal use 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":28,\"uuid\":\"44963547-556c-43f4-b955-ac7444dab4f8\",\"name\":\"lib.model.tax.ch.pre_tax_material_420_8_1.name\",\"code\":\"VK\\u00dc\",\"digit\":\"420\",\"type\":\"pre_tax_material\",\"account_id\":136,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VK\\u00dc - Pre-tax reduction 8.10%\",\"start_month\":7,\"end_month\":null}]",
+ "data": "[{\"id\":4,\"uuid\":\"e758a27a-f208-434b-b6ad-dacbeac737bf\",\"name\":\"lib.model.tax.ch.sales_abroad.name\",\"code\":\"ULA\",\"digit\":\"221\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"ULA - Leistungen im Ausland 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":5,\"uuid\":\"d78183c9-954e-40e7-9e03-b5dca94ccbbb\",\"name\":\"lib.model.tax.ch.notification_procedure.name\",\"code\":\"MEL\",\"digit\":\"225\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"MEL - Transfer by reporting procedure 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":6,\"uuid\":\"4cf8b2b1-ac3c-466f-b9a5-5fcd076b4355\",\"name\":\"lib.model.tax.ch.sales_not_optimized.name\",\"code\":\"UNO\",\"digit\":\"230\",\"type\":\"not_taxable_turnover\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"UNO - Exempt revenue 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":7,\"uuid\":\"b566d3ff-ce58-4197-b802-e75d59ddc24c\",\"name\":\"lib.model.tax.ch.import_tax_inv_exempt_zero.name\",\"code\":\"V00\",\"digit\":\"000\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"V00 - No VAT 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":8,\"uuid\":\"7c8e24b2-48c9-4504-9dc8-260ef839c718\",\"name\":\"lib.model.tax.ch.sales_0.name\",\"code\":\"U00\",\"digit\":\"000\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"U00 - No VAT 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":9,\"uuid\":\"3935fa57-2b6d-4e00-893d-4e0bde6da035\",\"name\":\"lib.model.tax.ch.import_tax_mat_exempt.name\",\"code\":\"VIM\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"VIM - Import 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":10,\"uuid\":\"97503c3e-fb54-43cd-bc9c-d053efabe79e\",\"name\":\"lib.model.tax.ch.import_tax_mat_dl.name\",\"code\":\"ZOLLM\",\"digit\":\"400\",\"type\":\"pre_customs_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":100,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"ZOLLM - Import Mat\\\/SV 100.00%\",\"start_month\":null,\"end_month\":null},{\"id\":11,\"uuid\":\"ab48d322-f167-4f19-829f-d121419964e6\",\"name\":\"lib.model.tax.ch.import_tax_inv_ba.name\",\"code\":\"ZOLLB\",\"digit\":\"405\",\"type\":\"pre_customs_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":100,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":true,\"display_name\":\"ZOLLB - Import Inv\\\/BA 100.00%\",\"start_month\":null,\"end_month\":null},{\"id\":12,\"uuid\":\"41605934-f319-429e-b70d-a8d5fed7335b\",\"name\":\"lib.model.tax.ch.sales.subsidies_surtaxes_dumping.name\",\"code\":\"SUB\",\"digit\":\"900\",\"type\":\"non_consideration_sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"SUB - Subsidies, Visitor's tax, Disposal 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":13,\"uuid\":\"df49f025-7165-42b0-a266-ae1aa7d11257\",\"name\":\"lib.model.tax.ch.sales.donation_dividends_indemnity.name\",\"code\":\"SPE\",\"digit\":\"910\",\"type\":\"non_consideration_sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":0,\"net_tax_value\":null,\"start_year\":null,\"end_year\":null,\"is_active\":false,\"display_name\":\"SPE - Donations, Dividends, Compensation 0.00%\",\"start_month\":null,\"end_month\":null},{\"id\":14,\"uuid\":\"c8365961-0a1e-4a89-aeb0-b49112ead4eb\",\"name\":\"lib.model.tax.ch.sales_tax_303.name\",\"code\":\"UN81\",\"digit\":\"303\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"UN81 - Revenue (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":15,\"uuid\":\"b6859ca9-d026-4269-8293-9e01c7603fec\",\"name\":\"lib.model.tax.ch.sales_tax_313.name\",\"code\":\"UR26\",\"digit\":\"313\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"UR26 - Revenue (RS) 2.60%\",\"start_month\":7,\"end_month\":null},{\"id\":16,\"uuid\":\"bf160856-7e11-4fb7-af87-c134771f2e4b\",\"name\":\"lib.model.tax.ch.sales_tax_343.name\",\"code\":\"US38\",\"digit\":\"343\",\"type\":\"sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":3.8,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"US38 - Revenue (SS) 3.80%\",\"start_month\":7,\"end_month\":null},{\"id\":17,\"uuid\":\"6638b197-14ef-4d45-a887-857b45b03775\",\"name\":\"lib.model.tax.ch.opted_sales_tax_205.303.name\",\"code\":\"UO81\",\"digit\":\"205.303\",\"type\":\"opted_sales_tax\",\"account_id\":132,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"UO81 - Opted revenue 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":18,\"uuid\":\"749bd701-3691-4d70-8594-dba77c36d1d5\",\"name\":\"lib.model.tax.ch.pre_regards_tax_investment_383.name\",\"code\":\"BZB81\",\"digit\":\"383\",\"type\":\"pre_regards_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"BZB81 - Service import tax Inv\\\/BA 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":19,\"uuid\":\"90bee346-f5f5-4284-9dc1-4cef2b4ef52d\",\"name\":\"lib.model.tax.ch.pre_regards_tax_material_383.name\",\"code\":\"BZM81\",\"digit\":\"383\",\"type\":\"pre_regards_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"BZM81 - Service import tax Mat\\\/SV 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":20,\"uuid\":\"0ee68582-58bb-4e8e-a485-74de4474a8dc\",\"name\":\"lib.model.tax.ch.pre_tax_material_400_2_6.name\",\"code\":\"VM26\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VM26 - Mat\\\/SV (RS) 2.60%\",\"start_month\":7,\"end_month\":null},{\"id\":21,\"uuid\":\"7e902614-92f9-4727-a14e-6a7e12c76152\",\"name\":\"lib.model.tax.ch.pre_tax_material_400_8_1.name\",\"code\":\"VM81\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VM81 - Mat\\\/SV (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":22,\"uuid\":\"2f8f58dc-8cb2-4d38-a348-a35afbf04386\",\"name\":\"lib.model.tax.ch.pre_tax_material_400_3_8.name\",\"code\":\"VM38\",\"digit\":\"400\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":3.8,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VM38 - Mat\\\/SV (SS) 3.80%\",\"start_month\":7,\"end_month\":null},{\"id\":23,\"uuid\":\"88256004-e90b-479a-9f0c-83a5bd523d64\",\"name\":\"lib.model.tax.ch.pre_tax_investment_405_2_6.name\",\"code\":\"VB26\",\"digit\":\"405\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":2.6,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VB26 - Inv\\\/BA (RS) 2.60%\",\"start_month\":7,\"end_month\":null},{\"id\":24,\"uuid\":\"f016a926-24bc-48ec-94ee-d65aa64059e1\",\"name\":\"lib.model.tax.ch.pre_tax_investment_405_8_1.name\",\"code\":\"VB81\",\"digit\":\"405\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":true,\"display_name\":\"VB81 - Inv\\\/BA (NS) 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":25,\"uuid\":\"7e675761-e569-45dd-99b0-b34a3d0277bc\",\"name\":\"lib.model.tax.ch.pre_tax_investment_405_3_8.name\",\"code\":\"VB38\",\"digit\":\"405\",\"type\":\"pre_tax_investment\",\"account_id\":138,\"tax_settlement_type\":\"none\",\"value\":3.8,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VB38 - Inv\\\/BA (SS) 3.80%\",\"start_month\":7,\"end_month\":null},{\"id\":26,\"uuid\":\"0b6188c2-314a-4c06-85f3-27f9952321ee\",\"name\":\"lib.model.tax.ch.pre_tax_material_410_8_1.name\",\"code\":\"VES\",\"digit\":\"410\",\"type\":\"pre_tax_material\",\"account_id\":139,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VES - Deduction of input VAT 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":27,\"uuid\":\"fad3b755-c940-4d73-8954-0bf71c7ecd64\",\"name\":\"lib.model.tax.ch.pre_tax_material_415_8_1.name\",\"code\":\"VEV\",\"digit\":\"415\",\"type\":\"pre_tax_material\",\"account_id\":135,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VEV - Compensation personal use 8.10%\",\"start_month\":7,\"end_month\":null},{\"id\":28,\"uuid\":\"44963547-556c-43f4-b955-ac7444dab4f8\",\"name\":\"lib.model.tax.ch.pre_tax_material_420_8_1.name\",\"code\":\"VK\\u00dc\",\"digit\":\"420\",\"type\":\"pre_tax_material\",\"account_id\":136,\"tax_settlement_type\":\"none\",\"value\":8.1,\"net_tax_value\":null,\"start_year\":2023,\"end_year\":null,\"is_active\":false,\"display_name\":\"VK\\u00dc - Pre-tax reduction 8.10%\",\"start_month\":7,\"end_month\":null}]",
"context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Taxes/fetch-a-tax.json b/tests/Fixtures/Saloon/Taxes/fetch-a-tax.json
index 5345606..8cd13d0 100644
--- a/tests/Fixtures/Saloon/Taxes/fetch-a-tax.json
+++ b/tests/Fixtures/Saloon/Taxes/fetch-a-tax.json
@@ -1,22 +1,21 @@
{
"statusCode": 404,
"headers": {
- "Date": "Mon, 10 Nov 2025 10:31:28 GMT",
+ "Date": "Thu, 27 Nov 2025 10:43:22 GMT",
"Content-Type": "application\/json",
"Transfer-Encoding": "chunked",
"Connection": "keep-alive",
- "CF-RAY": "99c4e161986dbac2-ZRH",
- "ratelimit-reset": "32",
+ "CF-RAY": "9a51062ecf417dd2-ZRH",
+ "ratelimit-reset": "38",
"x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "998",
+ "x-ratelimit-remaining-minute": "997",
"ratelimit-limit": "1000",
- "ratelimit-remaining": "998",
+ "ratelimit-remaining": "997",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "alt-svc": "h3=\":443\"; ma=86400",
"cf-cache-status": "DYNAMIC",
"Server": "cloudflare"
},
diff --git a/tests/Fixtures/Saloon/Units/fetch-a-list-of-units.json b/tests/Fixtures/Saloon/Units/fetch-a-list-of-units.json
index 995820a..7c015e0 100644
--- a/tests/Fixtures/Saloon/Units/fetch-a-list-of-units.json
+++ b/tests/Fixtures/Saloon/Units/fetch-a-list-of-units.json
@@ -1,23 +1,24 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 17:42:00 GMT",
+ "Date": "Thu, 27 Nov 2025 10:42:36 GMT",
"Content-Type": "application\/json",
"Content-Length": "43",
"Connection": "keep-alive",
- "ratelimit-remaining": "999",
- "ratelimit-reset": "60",
+ "CF-RAY": "9a510511b88c0396-ZRH",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "24",
"x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "999",
+ "x-ratelimit-remaining-minute": "998",
"ratelimit-limit": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb601ceb89b4139-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "[{\"id\":1,\"name\":\"Stk\"},{\"id\":2,\"name\":\"h\"}]"
+ "data": "[{\"id\":1,\"name\":\"Stk\"},{\"id\":2,\"name\":\"h\"}]",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Users/fetch-a-list-of-users.json b/tests/Fixtures/Saloon/Users/fetch-a-list-of-users.json
index adec433..a35d3d2 100644
--- a/tests/Fixtures/Saloon/Users/fetch-a-list-of-users.json
+++ b/tests/Fixtures/Saloon/Users/fetch-a-list-of-users.json
@@ -1,15 +1,16 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 17:48:58 GMT",
+ "Date": "Thu, 27 Nov 2025 10:45:10 GMT",
"Content-Type": "application\/json",
- "Content-Length": "153",
+ "Content-Length": "152",
"Connection": "keep-alive",
- "ratelimit-remaining": "999",
- "ratelimit-reset": "2",
- "x-ratelimit-limit-minute": "1000",
- "x-ratelimit-remaining-minute": "999",
+ "CF-RAY": "9a5108d1790ac4a5-ZRH",
+ "x-ratelimit-remaining-minute": "998",
"ratelimit-limit": "1000",
+ "ratelimit-remaining": "998",
+ "ratelimit-reset": "50",
+ "x-ratelimit-limit-minute": "1000",
"x-total-count": "1",
"x-limit": "500",
"x-offset": "0",
@@ -18,9 +19,9 @@
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb60bfe493e77a5-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "[{\"id\":1,\"salutation_type\":\"male\",\"firstname\":\"Max\",\"lastname\":\"M\\u00fcller\",\"email\":\"rakeli3800@exweme.com\",\"is_superadmin\":true,\"is_accountant\":false}]"
+ "data": "[{\"id\":1,\"salutation_type\":\"male\",\"firstname\":\"Max\",\"lastname\":\"Mustermann\",\"email\":\"tijeke3743@gotemv.com\",\"is_superadmin\":true,\"is_accountant\":false}]",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Fixtures/Saloon/Users/fetch-authenticated-user.json b/tests/Fixtures/Saloon/Users/fetch-authenticated-user.json
index 84b02a1..bf4e669 100644
--- a/tests/Fixtures/Saloon/Users/fetch-authenticated-user.json
+++ b/tests/Fixtures/Saloon/Users/fetch-authenticated-user.json
@@ -1,23 +1,24 @@
{
"statusCode": 200,
"headers": {
- "Date": "Mon, 30 Sep 2024 22:42:50 GMT",
+ "Date": "Thu, 27 Nov 2025 10:45:09 GMT",
"Content-Type": "application\/json",
- "Content-Length": "151",
+ "Content-Length": "150",
"Connection": "keep-alive",
+ "CF-RAY": "9a5108cff9fdbe72-ZRH",
"x-ratelimit-remaining-minute": "999",
- "x-ratelimit-limit-minute": "1000",
- "ratelimit-remaining": "999",
- "ratelimit-reset": "10",
"ratelimit-limit": "1000",
+ "ratelimit-remaining": "999",
+ "ratelimit-reset": "51",
+ "x-ratelimit-limit-minute": "1000",
"Cache-Control": "no-store",
"pragma": "no-cache",
"vary": "Origin",
"access-control-allow-origin": "https:\/\/office.bexio.com",
"via": "1.1 google",
- "CF-Cache-Status": "DYNAMIC",
- "Server": "cloudflare",
- "CF-RAY": "8cb7ba78fc10951d-LHR"
+ "cf-cache-status": "DYNAMIC",
+ "Server": "cloudflare"
},
- "data": "{\"id\":1,\"salutation_type\":\"male\",\"firstname\":\"Max\",\"lastname\":\"M\\u00fcller\",\"email\":\"rakeli3800@exweme.com\",\"is_superadmin\":true,\"is_accountant\":false}"
+ "data": "{\"id\":1,\"salutation_type\":\"male\",\"firstname\":\"Max\",\"lastname\":\"Mustermann\",\"email\":\"tijeke3743@gotemv.com\",\"is_superadmin\":true,\"is_accountant\":false}",
+ "context": []
}
\ No newline at end of file
diff --git a/tests/Requests/Accounts/FetchAListOfAccountsRequestTest.php b/tests/Requests/Accounts/FetchAListOfAccountsRequestTest.php
index 22052a3..a970dcc 100644
--- a/tests/Requests/Accounts/FetchAListOfAccountsRequestTest.php
+++ b/tests/Requests/Accounts/FetchAListOfAccountsRequestTest.php
@@ -19,5 +19,5 @@
Saloon::assertSent(FetchAListOfAccountsRequest::class);
expect($response->dto())->toBeInstanceOf(Collection::class)
- ->and($response->dto()->count())->toBe(133);
-});
+ ->and($response->dto()->count())->toBe(211);
+})->group('accounts');
diff --git a/tests/Requests/Accounts/SearchAccountsRequestTest.php b/tests/Requests/Accounts/SearchAccountsRequestTest.php
index b83a4f4..1339078 100644
--- a/tests/Requests/Accounts/SearchAccountsRequestTest.php
+++ b/tests/Requests/Accounts/SearchAccountsRequestTest.php
@@ -19,5 +19,5 @@
Saloon::assertSent(SearchAccountsRequest::class);
expect($response->dto())->toBeInstanceOf(Collection::class)
- ->and($response->dto()->count())->toBe(0);
-});
+ ->and($response->dto()->count())->toBe(1);
+})->group('accounts');
diff --git a/tests/Requests/Contacts/BulkCreateContactsRequestTest.php b/tests/Requests/Contacts/BulkCreateContactsRequestTest.php
index 64d1af6..5fe8f78 100644
--- a/tests/Requests/Contacts/BulkCreateContactsRequestTest.php
+++ b/tests/Requests/Contacts/BulkCreateContactsRequestTest.php
@@ -32,4 +32,4 @@
dd($response->json());
Saloon::assertSent(BulkCreateContactsRequest::class);
-})->skip();
+})->group('contacts')->skip();
diff --git a/tests/Requests/Contacts/CreateContactRequestTest.php b/tests/Requests/Contacts/CreateContactRequestTest.php
index 8fb13f7..7b7f656 100644
--- a/tests/Requests/Contacts/CreateContactRequestTest.php
+++ b/tests/Requests/Contacts/CreateContactRequestTest.php
@@ -24,4 +24,4 @@
));
Saloon::assertSent(CreateContactRequest::class);
-});
+})->group('contacts');
diff --git a/tests/Requests/Contacts/DeleteAContactRequestTest.php b/tests/Requests/Contacts/DeleteAContactRequestTest.php
index 04b1cee..522b3b3 100644
--- a/tests/Requests/Contacts/DeleteAContactRequestTest.php
+++ b/tests/Requests/Contacts/DeleteAContactRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new DeleteAContactRequest(id: 4));
Saloon::assertSent(DeleteAContactRequest::class);
-});
+})->group('contacts');
diff --git a/tests/Requests/Contacts/EditAContactRequestTest.php b/tests/Requests/Contacts/EditAContactRequestTest.php
index c3a6df4..464dbfa 100644
--- a/tests/Requests/Contacts/EditAContactRequestTest.php
+++ b/tests/Requests/Contacts/EditAContactRequestTest.php
@@ -25,4 +25,4 @@
));
Saloon::assertSent(EditAContactRequest::class);
-});
+})->group('contacts');
diff --git a/tests/Requests/Contacts/FetchAContactRequestTest.php b/tests/Requests/Contacts/FetchAContactRequestTest.php
index ec18f4a..d0ff4ca 100644
--- a/tests/Requests/Contacts/FetchAContactRequestTest.php
+++ b/tests/Requests/Contacts/FetchAContactRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new FetchAContactRequest(id: 1));
Saloon::assertSent(FetchAContactRequest::class);
-});
+})->group('contacts');
diff --git a/tests/Requests/Contacts/FetchAListOfContactsRequestTest.php b/tests/Requests/Contacts/FetchAListOfContactsRequestTest.php
index db97b5c..7eb51ca 100644
--- a/tests/Requests/Contacts/FetchAListOfContactsRequestTest.php
+++ b/tests/Requests/Contacts/FetchAListOfContactsRequestTest.php
@@ -19,5 +19,5 @@
Saloon::assertSent(FetchAListOfContactsRequest::class);
expect($response->dto())->toBeInstanceOf(Collection::class)
- ->and($response->dto()->count())->toBe(2);
-});
+ ->and($response->dto()->count())->toBe(1);
+})->group('contacts');
diff --git a/tests/Requests/Contacts/RestoreAContactRequestTest.php b/tests/Requests/Contacts/RestoreAContactRequestTest.php
index ebefbd6..14773a5 100644
--- a/tests/Requests/Contacts/RestoreAContactRequestTest.php
+++ b/tests/Requests/Contacts/RestoreAContactRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new RestoreAContactRequest(id: 4));
Saloon::assertSent(RestoreAContactRequest::class);
-});
+})->group('contacts');
diff --git a/tests/Requests/Contacts/SearchContactsRequestTest.php b/tests/Requests/Contacts/SearchContactsRequestTest.php
index 8f09953..4d75689 100644
--- a/tests/Requests/Contacts/SearchContactsRequestTest.php
+++ b/tests/Requests/Contacts/SearchContactsRequestTest.php
@@ -20,4 +20,4 @@
expect($response->dto())->toBeInstanceOf(Collection::class)
->and($response->dto()->count())->toBe(0);
-});
+})->group('contacts');
diff --git a/tests/Requests/Currencies/CreateCurrencyRequestTest.php b/tests/Requests/Currencies/CreateCurrencyRequestTest.php
index 4218929..267d5ad 100644
--- a/tests/Requests/Currencies/CreateCurrencyRequestTest.php
+++ b/tests/Requests/Currencies/CreateCurrencyRequestTest.php
@@ -22,4 +22,4 @@
));
Saloon::assertSent(CreateCurrencyRequest::class);
-});
+})->group('currencies');
diff --git a/tests/Requests/Currencies/DeleteACurrencyRequestTest.php b/tests/Requests/Currencies/DeleteACurrencyRequestTest.php
index 5ed95e4..c097bfb 100644
--- a/tests/Requests/Currencies/DeleteACurrencyRequestTest.php
+++ b/tests/Requests/Currencies/DeleteACurrencyRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new DeleteACurrencyRequest(id: 6));
Saloon::assertSent(DeleteACurrencyRequest::class);
-});
+})->group('currencies');
diff --git a/tests/Requests/Currencies/EditACurrencyRequestTest.php b/tests/Requests/Currencies/EditACurrencyRequestTest.php
index fe3a789..9aaf443 100644
--- a/tests/Requests/Currencies/EditACurrencyRequestTest.php
+++ b/tests/Requests/Currencies/EditACurrencyRequestTest.php
@@ -22,4 +22,4 @@
));
Saloon::assertSent(EditACurrencyRequest::class);
-});
+})->group('currencies');
diff --git a/tests/Requests/Currencies/FetchACurrencyRequestTest.php b/tests/Requests/Currencies/FetchACurrencyRequestTest.php
index 315957e..3985317 100644
--- a/tests/Requests/Currencies/FetchACurrencyRequestTest.php
+++ b/tests/Requests/Currencies/FetchACurrencyRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new FetchACurrencyRequest(id: 1));
Saloon::assertSent(FetchACurrencyRequest::class);
-});
+})->group('currencies');
diff --git a/tests/Requests/Currencies/FetchAListOfCurrenciesRequestTest.php b/tests/Requests/Currencies/FetchAListOfCurrenciesRequestTest.php
index 43d2f90..438bfef 100644
--- a/tests/Requests/Currencies/FetchAListOfCurrenciesRequestTest.php
+++ b/tests/Requests/Currencies/FetchAListOfCurrenciesRequestTest.php
@@ -20,4 +20,4 @@
expect($response->dto())->toBeInstanceOf(Collection::class)
->and($response->dto()->count())->toBe(7);
-});
+})->group('currencies');
diff --git a/tests/Requests/Currencies/FetchAllPossibleCurrencyCodesRequestTest.php b/tests/Requests/Currencies/FetchAllPossibleCurrencyCodesRequestTest.php
index 7a8d70c..a66c765 100644
--- a/tests/Requests/Currencies/FetchAllPossibleCurrencyCodesRequestTest.php
+++ b/tests/Requests/Currencies/FetchAllPossibleCurrencyCodesRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new FetchAllPossibleCurrencyCodesRequest);
Saloon::assertSent(FetchAllPossibleCurrencyCodesRequest::class);
-});
+})->group('currencies');
diff --git a/tests/Requests/Currencies/FetchExchangeRatesForCurrenciesRequestTest.php b/tests/Requests/Currencies/FetchExchangeRatesForCurrenciesRequestTest.php
index b7b9766..fde2861 100644
--- a/tests/Requests/Currencies/FetchExchangeRatesForCurrenciesRequestTest.php
+++ b/tests/Requests/Currencies/FetchExchangeRatesForCurrenciesRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new FetchExchangeRatesForCurrenciesRequest(id: 2));
Saloon::assertSent(FetchExchangeRatesForCurrenciesRequest::class);
-});
+})->group('currencies');
diff --git a/tests/Requests/ItemPositions/CreateAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/CreateAnItemPositionRequestTest.php
new file mode 100644
index 0000000..ab04c7b
--- /dev/null
+++ b/tests/Requests/ItemPositions/CreateAnItemPositionRequestTest.php
@@ -0,0 +1,71 @@
+ 1,
+ 'kb_document_type' => 'kb_offer',
+ 'kb_position_id' => 1,
+ 'type' => 'KbPositionCustom',
+ 'amount' => '1',
+ 'unit_id' => 1,
+ 'unit_name' => 'Stk',
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'tax_value' => '8.10',
+ 'text' => 'Test Item Position',
+ 'unit_price' => '100.00',
+ 'discount_in_percent' => '0',
+ 'position_total' => '100.00',
+ 'parent_id' => null,
+ 'article_id' => null,
+ 'show_pos_nr' => true,
+ 'pagebreak' => false,
+ 'is_percentual' => false,
+ 'value' => null,
+ 'pos' => '1',
+ 'internal_pos' => 1,
+ 'is_optional' => false,
+ ];
+
+ Saloon::fake([
+ CreateAnItemPositionRequest::class => MockResponse::make(body: $mockItemPosition, status: 201),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $itemPosition = CreateEditItemPositionDTO::fromArray([
+ 'kb_document_type' => 'kb_offer',
+ 'type' => 'KbPositionCustom',
+ 'amount' => '1',
+ 'unit_id' => 1,
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'text' => 'Test Item Position',
+ 'unit_price' => '100.00',
+ 'discount_in_percent' => '0',
+ ]);
+
+ $response = $connector->send(new CreateAnItemPositionRequest(
+ kb_document_id: 1,
+ itemPosition: $itemPosition
+ ));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(ItemPositionDTO::class);
+
+ Saloon::assertSent(CreateAnItemPositionRequest::class);
+})->group('item-positions');
diff --git a/tests/Requests/ItemPositions/DeleteAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/DeleteAnItemPositionRequestTest.php
new file mode 100644
index 0000000..73ae959
--- /dev/null
+++ b/tests/Requests/ItemPositions/DeleteAnItemPositionRequestTest.php
@@ -0,0 +1,69 @@
+ 1,
+ 'kb_document_type' => 'kb_offer',
+ 'kb_position_id' => 1,
+ 'type' => 'KbPositionCustom',
+ 'amount' => '1',
+ 'unit_id' => 1,
+ 'unit_name' => 'Stk',
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'tax_value' => '8.10',
+ 'text' => 'Test Item Position',
+ 'unit_price' => '100.00',
+ 'discount_in_percent' => '0',
+ 'position_total' => '100.00',
+ 'parent_id' => null,
+ 'article_id' => null,
+ 'show_pos_nr' => true,
+ 'pagebreak' => false,
+ 'is_percentual' => false,
+ 'value' => null,
+ 'pos' => '1',
+ 'internal_pos' => 1,
+ 'is_optional' => false,
+ ],
+ ];
+
+ Saloon::fake([
+ DeleteAnItemPositionRequest::class => MockResponse::make(status: 204),
+ FetchAListOfItemPositionsRequest::class => MockResponse::make(body: $mockItemPositions, status: 200),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $itemPositionsResponse = $connector->send(new FetchAListOfItemPositionsRequest(
+ kb_document_id: 1,
+ kb_document_type: 'kb_offer'
+ ));
+ $existingItemPosition = $itemPositionsResponse->dto()->first();
+
+ if (! $existingItemPosition) {
+ $this->markTestSkipped('No item positions found in the system to delete');
+ }
+
+ $response = $connector->send(new DeleteAnItemPositionRequest(item_position_id: $existingItemPosition->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(DeleteAnItemPositionRequest::class);
+})->group('item-positions');
diff --git a/tests/Requests/ItemPositions/EditAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/EditAnItemPositionRequestTest.php
new file mode 100644
index 0000000..29d2965
--- /dev/null
+++ b/tests/Requests/ItemPositions/EditAnItemPositionRequestTest.php
@@ -0,0 +1,113 @@
+ 1,
+ 'kb_document_type' => 'kb_offer',
+ 'kb_position_id' => 1,
+ 'type' => 'KbPositionCustom',
+ 'amount' => '1',
+ 'unit_id' => 1,
+ 'unit_name' => 'Stk',
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'tax_value' => '8.10',
+ 'text' => 'Test Item Position',
+ 'unit_price' => '100.00',
+ 'discount_in_percent' => '0',
+ 'position_total' => '100.00',
+ 'parent_id' => null,
+ 'article_id' => null,
+ 'show_pos_nr' => true,
+ 'pagebreak' => false,
+ 'is_percentual' => false,
+ 'value' => null,
+ 'pos' => '1',
+ 'internal_pos' => 1,
+ 'is_optional' => false,
+ ],
+ ];
+
+ $mockUpdatedItemPosition = [
+ 'id' => 1,
+ 'kb_document_type' => 'kb_offer',
+ 'kb_position_id' => 1,
+ 'type' => 'KbPositionCustom',
+ 'amount' => '2',
+ 'unit_id' => 1,
+ 'unit_name' => 'Stk',
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'tax_value' => '8.10',
+ 'text' => 'Updated Item Position',
+ 'unit_price' => '150.00',
+ 'discount_in_percent' => '0',
+ 'position_total' => '300.00',
+ 'parent_id' => null,
+ 'article_id' => null,
+ 'show_pos_nr' => true,
+ 'pagebreak' => false,
+ 'is_percentual' => false,
+ 'value' => null,
+ 'pos' => '1',
+ 'internal_pos' => 1,
+ 'is_optional' => false,
+ ];
+
+ Saloon::fake([
+ FetchAListOfItemPositionsRequest::class => MockResponse::make(body: $mockItemPositions, status: 200),
+ EditAnItemPositionRequest::class => MockResponse::make(body: $mockUpdatedItemPosition, status: 200),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $kbDocumentType = 'kb_offer';
+ $itemPositionsResponse = $connector->send(new FetchAListOfItemPositionsRequest(
+ kb_document_id: 1,
+ kb_document_type: $kbDocumentType
+ ));
+ $existingItemPosition = $itemPositionsResponse->dto()->first();
+
+ if (! $existingItemPosition) {
+ $this->markTestSkipped('No item positions found in the system to edit');
+ }
+
+ $itemPosition = CreateEditItemPositionDTO::fromArray([
+ 'kb_document_type' => $kbDocumentType,
+ 'type' => $existingItemPosition->type,
+ 'amount' => '2',
+ 'unit_id' => $existingItemPosition->unit_id,
+ 'account_id' => $existingItemPosition->account_id,
+ 'tax_id' => $existingItemPosition->tax_id,
+ 'text' => 'Updated Item Position',
+ 'unit_price' => '150.00',
+ 'discount_in_percent' => '0',
+ ]);
+
+ $response = $connector->send(new EditAnItemPositionRequest(
+ item_position_id: $existingItemPosition->id,
+ itemPosition: $itemPosition
+ ));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(ItemPositionDTO::class);
+
+ Saloon::assertSent(EditAnItemPositionRequest::class);
+})->group('item-positions');
diff --git a/tests/Requests/ItemPositions/FetchAListOfItemPositionsRequestTest.php b/tests/Requests/ItemPositions/FetchAListOfItemPositionsRequestTest.php
new file mode 100644
index 0000000..e4adb27
--- /dev/null
+++ b/tests/Requests/ItemPositions/FetchAListOfItemPositionsRequestTest.php
@@ -0,0 +1,59 @@
+ 1,
+ 'kb_document_type' => 'kb_offer',
+ 'kb_position_id' => 1,
+ 'type' => 'KbPositionCustom',
+ 'amount' => '1',
+ 'unit_id' => 1,
+ 'unit_name' => 'Stk',
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'tax_value' => '8.10',
+ 'text' => 'Test Item Position',
+ 'unit_price' => '100.00',
+ 'discount_in_percent' => '0',
+ 'position_total' => '100.00',
+ 'parent_id' => null,
+ 'article_id' => null,
+ 'show_pos_nr' => true,
+ 'pagebreak' => false,
+ 'is_percentual' => false,
+ 'value' => null,
+ 'pos' => '1',
+ 'internal_pos' => 1,
+ 'is_optional' => false,
+ ],
+ ];
+
+ Saloon::fake([
+ FetchAListOfItemPositionsRequest::class => MockResponse::make(body: $mockItemPositions, status: 200),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+ $response = $connector->send(new FetchAListOfItemPositionsRequest(
+ kb_document_id: 1,
+ kb_document_type: 'kb_offer'
+ ));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(Collection::class);
+
+ Saloon::assertSent(FetchAListOfItemPositionsRequest::class);
+})->group('item-positions');
diff --git a/tests/Requests/ItemPositions/FetchAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/FetchAnItemPositionRequestTest.php
new file mode 100644
index 0000000..e6cfe88
--- /dev/null
+++ b/tests/Requests/ItemPositions/FetchAnItemPositionRequestTest.php
@@ -0,0 +1,73 @@
+ 1,
+ 'kb_document_type' => 'kb_offer',
+ 'kb_position_id' => 1,
+ 'type' => 'KbPositionCustom',
+ 'amount' => '1',
+ 'unit_id' => 1,
+ 'unit_name' => 'Stk',
+ 'account_id' => 1,
+ 'tax_id' => 1,
+ 'tax_value' => '8.10',
+ 'text' => 'Test Item Position',
+ 'unit_price' => '100.00',
+ 'discount_in_percent' => '0',
+ 'position_total' => '100.00',
+ 'parent_id' => null,
+ 'article_id' => null,
+ 'show_pos_nr' => true,
+ 'pagebreak' => false,
+ 'is_percentual' => false,
+ 'value' => null,
+ 'pos' => '1',
+ 'internal_pos' => 1,
+ 'is_optional' => false,
+ ],
+ ];
+
+ $mockItemPosition = $mockItemPositions[0];
+
+ Saloon::fake([
+ FetchAnItemPositionRequest::class => MockResponse::make(body: $mockItemPosition, status: 200),
+ FetchAListOfItemPositionsRequest::class => MockResponse::make(body: $mockItemPositions, status: 200),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $itemPositionsResponse = $connector->send(new FetchAListOfItemPositionsRequest(
+ kb_document_id: 1,
+ kb_document_type: 'kb_offer'
+ ));
+ $existingItemPosition = $itemPositionsResponse->dto()->first();
+
+ if (! $existingItemPosition) {
+ $this->markTestSkipped('No item positions found in the system to fetch');
+ }
+
+ $response = $connector->send(new FetchAnItemPositionRequest(item_position_id: $existingItemPosition->id));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(ItemPositionDTO::class);
+
+ Saloon::assertSent(FetchAnItemPositionRequest::class);
+})->group('item-positions');
diff --git a/tests/Requests/Quotes/AcceptAQuoteRequestTest.php b/tests/Requests/Quotes/AcceptAQuoteRequestTest.php
new file mode 100644
index 0000000..eaa0c6b
--- /dev/null
+++ b/tests/Requests/Quotes/AcceptAQuoteRequestTest.php
@@ -0,0 +1,94 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/accept-a-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/accept-a-quote/issue-a-quote'),
+ AcceptAQuoteRequest::class => MockResponse::fixture('Quotes/accept-a-quote/accept-a-quote'),
+ ]);
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $issueResponse = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+ expect($issueResponse->successful())->toBeTrue();
+
+ $response = $connector->send(new AcceptAQuoteRequest(quote_id: $createdQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+ Saloon::assertSent(AcceptAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/CreateAQuoteRequestTest.php b/tests/Requests/Quotes/CreateAQuoteRequestTest.php
new file mode 100644
index 0000000..d182765
--- /dev/null
+++ b/tests/Requests/Quotes/CreateAQuoteRequestTest.php
@@ -0,0 +1,82 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/create-a-quote/create-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $response = $connector->send(new CreateAQuoteRequest(quote: $quote));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(QuoteDTO::class);
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/CreateInvoiceFromQuoteRequestTest.php b/tests/Requests/Quotes/CreateInvoiceFromQuoteRequestTest.php
new file mode 100644
index 0000000..0307544
--- /dev/null
+++ b/tests/Requests/Quotes/CreateInvoiceFromQuoteRequestTest.php
@@ -0,0 +1,116 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/create-invoice-from-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/create-invoice-from-quote/issue-a-quote'),
+ FetchAQuoteRequest::class => MockResponse::fixture('Quotes/create-invoice-from-quote/fetch-a-quote'),
+ AcceptAQuoteRequest::class => MockResponse::fixture('Quotes/create-invoice-from-quote/accept-a-quote'),
+ CreateInvoiceFromQuoteRequest::class => MockResponse::fixture('Quotes/create-invoice-from-quote/create-invoice-from-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $issueResponse = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+ expect($issueResponse->successful())->toBeTrue();
+
+ // Fetch the quote again to check its status
+ $fetchResponse = $connector->send(new FetchAQuoteRequest(quote_id: $createdQuote->id));
+ expect($fetchResponse->successful())->toBeTrue();
+ $currentQuote = $fetchResponse->dto();
+
+ // Ensure the quote is in 'issued' status (ID 2) before accepting
+ expect($currentQuote->kb_item_status_id)->toBe(2, 'Quote must be in status 2 (issued) before it can be accepted and converted to an invoice');
+
+ // Accept the quote
+ $acceptResponse = $connector->send(new AcceptAQuoteRequest(quote_id: $createdQuote->id));
+ expect($acceptResponse->successful())->toBeTrue();
+
+ // Now create an invoice from the created quote
+ $response = $connector->send(new CreateInvoiceFromQuoteRequest(quote_id: $createdQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+ Saloon::assertSent(FetchAQuoteRequest::class);
+ Saloon::assertSent(AcceptAQuoteRequest::class);
+ Saloon::assertSent(CreateInvoiceFromQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/CreateOrderFromQuoteRequestTest.php b/tests/Requests/Quotes/CreateOrderFromQuoteRequestTest.php
new file mode 100644
index 0000000..dc86746
--- /dev/null
+++ b/tests/Requests/Quotes/CreateOrderFromQuoteRequestTest.php
@@ -0,0 +1,116 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/create-order-from-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/create-order-from-quote/issue-a-quote'),
+ FetchAQuoteRequest::class => MockResponse::fixture('Quotes/create-order-from-quote/fetch-a-quote'),
+ AcceptAQuoteRequest::class => MockResponse::fixture('Quotes/create-order-from-quote/accept-a-quote'),
+ CreateOrderFromQuoteRequest::class => MockResponse::fixture('Quotes/create-order-from-quote/create-order-from-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $issueResponse = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+ expect($issueResponse->successful())->toBeTrue();
+
+ // Fetch the quote again to check its status
+ $fetchResponse = $connector->send(new FetchAQuoteRequest(quote_id: $createdQuote->id));
+ expect($fetchResponse->successful())->toBeTrue();
+ $currentQuote = $fetchResponse->dto();
+
+ // Ensure the quote is in 'issued' status (ID 2) before accepting
+ expect($currentQuote->kb_item_status_id)->toBe(2, 'Quote must be in status 2 (issued) before it can be accepted and converted to an order');
+
+ // Accept the quote
+ $acceptResponse = $connector->send(new AcceptAQuoteRequest(quote_id: $createdQuote->id));
+ expect($acceptResponse->successful())->toBeTrue();
+
+ // Now create an order from the created quote
+ $response = $connector->send(new CreateOrderFromQuoteRequest(quote_id: $createdQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+ Saloon::assertSent(FetchAQuoteRequest::class);
+ Saloon::assertSent(AcceptAQuoteRequest::class);
+ Saloon::assertSent(CreateOrderFromQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/DeclineAQuoteRequestTest.php b/tests/Requests/Quotes/DeclineAQuoteRequestTest.php
new file mode 100644
index 0000000..1b353ef
--- /dev/null
+++ b/tests/Requests/Quotes/DeclineAQuoteRequestTest.php
@@ -0,0 +1,107 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/decline-a-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/decline-a-quote/issue-a-quote'),
+ FetchAQuoteRequest::class => MockResponse::fixture('Quotes/decline-a-quote/fetch-a-quote'),
+ DeclineAQuoteRequest::class => MockResponse::fixture('Quotes/decline-a-quote/decline-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $issueResponse = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+ expect($issueResponse->successful())->toBeTrue();
+
+ $fetchResponse = $connector->send(new FetchAQuoteRequest(quote_id: $createdQuote->id));
+ expect($fetchResponse->successful())->toBeTrue();
+ $currentQuote = $fetchResponse->dto();
+
+ if ($currentQuote->kb_item_status_id !== 2) {
+ $this->markTestSkipped('Quote is not in status 2 (issued). Actual status: '.$currentQuote->kb_item_status_id);
+ }
+
+ $response = $connector->send(new DeclineAQuoteRequest(quote_id: $currentQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+ Saloon::assertSent(FetchAQuoteRequest::class);
+ Saloon::assertSent(DeclineAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/DeleteAQuoteRequestTest.php b/tests/Requests/Quotes/DeleteAQuoteRequestTest.php
new file mode 100644
index 0000000..185417b
--- /dev/null
+++ b/tests/Requests/Quotes/DeleteAQuoteRequestTest.php
@@ -0,0 +1,89 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/delete-a-quote/create-a-quote'),
+ DeleteAQuoteRequest::class => MockResponse::fixture('Quotes/delete-a-quote/delete-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ // First, create a quote
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $response = $connector->send(new DeleteAQuoteRequest(quote_id: $createdQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(DeleteAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/EditAQuoteRequestTest.php b/tests/Requests/Quotes/EditAQuoteRequestTest.php
new file mode 100644
index 0000000..640f575
--- /dev/null
+++ b/tests/Requests/Quotes/EditAQuoteRequestTest.php
@@ -0,0 +1,111 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/edit-a-quote/create-a-quote'),
+ EditAQuoteRequest::class => MockResponse::fixture('Quotes/edit-a-quote/edit-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $updatedQuote = QuoteDTO::fromArray([
+ 'id' => $createdQuote->id,
+ 'title' => 'Updated Quote Title',
+ 'contact_id' => $createdQuote->contact_id,
+ 'user_id' => $createdQuote->user_id,
+ 'pr_project_id' => $createdQuote->pr_project_id,
+ 'logopaper_id' => $createdQuote->logopaper_id,
+ 'language_id' => $createdQuote->language_id,
+ 'bank_account_id' => $createdQuote->bank_account_id,
+ 'currency_id' => $createdQuote->currency_id,
+ 'payment_type_id' => $createdQuote->payment_type_id,
+ 'mwst_type' => $createdQuote->mwst_type,
+ 'mwst_is_net' => $createdQuote->mwst_is_net,
+ 'show_position_taxes' => $createdQuote->show_position_taxes,
+ 'is_valid_from' => $createdQuote->is_valid_from,
+ 'is_valid_until' => $createdQuote->is_valid_until,
+ 'api_reference' => $createdQuote->api_reference,
+ ]);
+
+ $response = $connector->send(new EditAQuoteRequest(
+ quote_id: $createdQuote->id,
+ quote: $updatedQuote
+ ));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(QuoteDTO::class);
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(EditAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/FetchAListOfQuotesRequestTest.php b/tests/Requests/Quotes/FetchAListOfQuotesRequestTest.php
new file mode 100644
index 0000000..68c50bb
--- /dev/null
+++ b/tests/Requests/Quotes/FetchAListOfQuotesRequestTest.php
@@ -0,0 +1,29 @@
+ MockResponse::fixture('Quotes/fetch-a-list-of-quotes/fetch-a-list-of-quotes'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+ $response = $connector->send(new FetchAListOfQuotesRequest);
+
+ ray($response->dto());
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(Collection::class);
+
+ Saloon::assertSent(FetchAListOfQuotesRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/FetchAQuoteRequestTest.php b/tests/Requests/Quotes/FetchAQuoteRequestTest.php
new file mode 100644
index 0000000..91a8247
--- /dev/null
+++ b/tests/Requests/Quotes/FetchAQuoteRequestTest.php
@@ -0,0 +1,40 @@
+ MockResponse::fixture('Quotes/fetch-a-quote/fetch-a-quote'),
+ FetchAListOfQuotesRequest::class => MockResponse::fixture('Quotes/fetch-a-quote/fetch-a-list-of-quotes'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $quotesResponse = $connector->send(new FetchAListOfQuotesRequest);
+ $existingQuote = $quotesResponse->dto()->first();
+
+ if (! $existingQuote) {
+ $this->markTestSkipped('No quotes found in the system to fetch');
+ }
+
+ $response = $connector->send(new FetchAQuoteRequest(quote_id: $existingQuote->id));
+
+ ray($response->dto());
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(QuoteDTO::class);
+
+ Saloon::assertSent(FetchAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/IssueAQuoteRequestTest.php b/tests/Requests/Quotes/IssueAQuoteRequestTest.php
new file mode 100644
index 0000000..b6db518
--- /dev/null
+++ b/tests/Requests/Quotes/IssueAQuoteRequestTest.php
@@ -0,0 +1,90 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/issue-a-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/issue-a-quote/issue-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ // First, create a quote
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ // Now issue the created quote
+ $response = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/MarkAsSentAQuoteRequestTest.php b/tests/Requests/Quotes/MarkAsSentAQuoteRequestTest.php
new file mode 100644
index 0000000..b6db11a
--- /dev/null
+++ b/tests/Requests/Quotes/MarkAsSentAQuoteRequestTest.php
@@ -0,0 +1,37 @@
+ MockResponse::fixture('Quotes/mark-as-sent-a-quote/mark-as-sent-a-quote'),
+ FetchAListOfQuotesRequest::class => MockResponse::fixture('Quotes/mark-as-sent-a-quote/fetch-a-list-of-quotes'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $quotesResponse = $connector->send(new FetchAListOfQuotesRequest);
+ $existingQuote = $quotesResponse->dto()->first();
+
+ if (! $existingQuote) {
+ $this->markTestSkipped('No quotes found in the system to mark as sent');
+ }
+
+ $response = $connector->send(new MarkAsSentAQuoteRequest(quote_id: $existingQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(MarkAsSentAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/ReissueAQuoteRequestTest.php b/tests/Requests/Quotes/ReissueAQuoteRequestTest.php
new file mode 100644
index 0000000..387e659
--- /dev/null
+++ b/tests/Requests/Quotes/ReissueAQuoteRequestTest.php
@@ -0,0 +1,110 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/reissue-a-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/reissue-a-quote/issue-a-quote'),
+ AcceptAQuoteRequest::class => MockResponse::fixture('Quotes/reissue-a-quote/accept-a-quote'),
+ FetchAQuoteRequest::class => MockResponse::fixture('Quotes/reissue-a-quote/fetch-a-quote'),
+ ReissueAQuoteRequest::class => MockResponse::fixture('Quotes/reissue-a-quote/reissue-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $issueResponse = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+ expect($issueResponse->successful())->toBeTrue();
+
+ $acceptResponse = $connector->send(new AcceptAQuoteRequest(quote_id: $createdQuote->id));
+ expect($acceptResponse->successful())->toBeTrue();
+
+ $fetchResponse = $connector->send(new FetchAQuoteRequest(quote_id: $createdQuote->id));
+ expect($fetchResponse->successful())->toBeTrue();
+ $currentQuote = $fetchResponse->dto();
+
+ $response = $connector->send(new ReissueAQuoteRequest(quote_id: $currentQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+ Saloon::assertSent(AcceptAQuoteRequest::class);
+ Saloon::assertSent(FetchAQuoteRequest::class);
+ Saloon::assertSent(ReissueAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/RevertIssueAQuoteRequestTest.php b/tests/Requests/Quotes/RevertIssueAQuoteRequestTest.php
new file mode 100644
index 0000000..db4962a
--- /dev/null
+++ b/tests/Requests/Quotes/RevertIssueAQuoteRequestTest.php
@@ -0,0 +1,103 @@
+ MockResponse::fixture('Contacts/fetch-a-list-of-contacts'),
+ FetchAuthenticatedUserRequest::class => MockResponse::fixture('Users/fetch-authenticated-user'),
+ FetchAListOfLanguagesRequest::class => MockResponse::fixture('Languages/fetch-a-list-of-languages'),
+ FetchAListOfBankAccountsRequest::class => MockResponse::fixture('BankAccounts/fetch-a-list-of-bank-accounts'),
+ FetchAListOfCurrenciesRequest::class => MockResponse::fixture('Currencies/fetch-a-list-of-currencies'),
+ FetchAListOfPaymentTypesRequest::class => MockResponse::fixture('PaymentTypes/fetch-a-list-of-payment-types'),
+ FetchAListOfUnitsRequest::class => MockResponse::fixture('Units/fetch-a-list-of-units'),
+ CreateAQuoteRequest::class => MockResponse::fixture('Quotes/revert-issue-a-quote/create-a-quote'),
+ IssueAQuoteRequest::class => MockResponse::fixture('Quotes/revert-issue-a-quote/issue-a-quote'),
+ FetchAQuoteRequest::class => MockResponse::fixture('Quotes/revert-issue-a-quote/fetch-a-quote'),
+ RevertIssueAQuoteRequest::class => MockResponse::fixture('Quotes/revert-issue-a-quote/revert-issue-a-quote'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $contacts = $connector->send(new FetchAListOfContactsRequest);
+ $user = $connector->send(new FetchAuthenticatedUserRequest);
+ $languages = $connector->send(new FetchAListOfLanguagesRequest);
+ $banks = $connector->send(new FetchAListOfBankAccountsRequest);
+ $currencies = $connector->send(new FetchAListOfCurrenciesRequest);
+ $paymentTypes = $connector->send(new FetchAListOfPaymentTypesRequest);
+ $units = $connector->send(new FetchAListOfUnitsRequest);
+
+ $quote = QuoteDTO::fromArray([
+ 'title' => 'Test Quote',
+ 'contact_id' => $contacts->dto()->first()->id,
+ 'user_id' => $user->dto()->id,
+ 'pr_project_id' => null,
+ 'language_id' => $languages->dto()->first()->id,
+ 'bank_account_id' => $banks->dto()->first()->id,
+ 'currency_id' => $currencies->dto()->first()->id,
+ 'payment_type_id' => $paymentTypes->dto()->first()->id,
+ 'mwst_type' => 1,
+ 'mwst_is_net' => true,
+ 'show_position_taxes' => true,
+ 'is_valid_from' => now()->format('Y-m-d'),
+ 'is_valid_until' => now()->addDays(5)->format('Y-m-d'),
+ 'api_reference' => Str::uuid(),
+ 'positions' => [
+ OfferPositionDTO::fromArray([
+ 'type' => 'KbPositionCustom',
+ 'amount' => 1,
+ 'unit_id' => $units->dto()->first()->id,
+ 'account_id' => 217,
+ 'tax_id' => 14,
+ 'text' => Str::uuid(),
+ 'unit_price' => 100,
+ 'discount_in_percent' => '0',
+ ]),
+ ],
+ ]);
+
+ $createResponse = $connector->send(new CreateAQuoteRequest(quote: $quote));
+ $createdQuote = $createResponse->dto();
+
+ $issueResponse = $connector->send(new IssueAQuoteRequest(quote_id: $createdQuote->id));
+ expect($issueResponse->successful())->toBeTrue();
+
+ $fetchResponse = $connector->send(new FetchAQuoteRequest(quote_id: $createdQuote->id));
+ expect($fetchResponse->successful())->toBeTrue();
+ $currentQuote = $fetchResponse->dto();
+
+ $response = $connector->send(new RevertIssueAQuoteRequest(quote_id: $currentQuote->id));
+
+ expect($response->successful())->toBeTrue();
+
+ Saloon::assertSent(CreateAQuoteRequest::class);
+ Saloon::assertSent(IssueAQuoteRequest::class);
+ Saloon::assertSent(FetchAQuoteRequest::class);
+ Saloon::assertSent(RevertIssueAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/SearchQuotesRequestTest.php b/tests/Requests/Quotes/SearchQuotesRequestTest.php
new file mode 100644
index 0000000..37a1deb
--- /dev/null
+++ b/tests/Requests/Quotes/SearchQuotesRequestTest.php
@@ -0,0 +1,32 @@
+ MockResponse::fixture('Quotes/search-quotes/search-quotes'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $response = $connector->send(new SearchQuotesRequest(
+ searchField: 'title',
+ searchTerm: 'Test'
+ ));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(Collection::class);
+
+ Saloon::assertSent(SearchQuotesRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Quotes/ShowPdfAQuoteRequestTest.php b/tests/Requests/Quotes/ShowPdfAQuoteRequestTest.php
new file mode 100644
index 0000000..25428ed
--- /dev/null
+++ b/tests/Requests/Quotes/ShowPdfAQuoteRequestTest.php
@@ -0,0 +1,39 @@
+ MockResponse::fixture('Quotes/show-pdf-a-quote/show-pdf-a-quote'),
+ FetchAListOfQuotesRequest::class => MockResponse::fixture('Quotes/show-pdf-a-quote/fetch-a-list-of-quotes'),
+ ]);
+
+ $connector = new BexioConnector(new ConnectWithToken);
+
+ $quotesResponse = $connector->send(new FetchAListOfQuotesRequest);
+ $existingQuote = $quotesResponse->dto()->first();
+
+ if (! $existingQuote) {
+ $this->markTestSkipped('No quotes found in the system to show PDF');
+ }
+
+ $response = $connector->send(new ShowPdfAQuoteRequest(quote_id: $existingQuote->id));
+
+ expect($response->successful())->toBeTrue();
+ expect($response->dto())->toBeInstanceOf(PdfDTO::class);
+
+ Saloon::assertSent(ShowPdfAQuoteRequest::class);
+})->group('quotes');
diff --git a/tests/Requests/Taxes/DeleteATaxRequestTest.php b/tests/Requests/Taxes/DeleteATaxRequestTest.php
index c36db31..12b7543 100644
--- a/tests/Requests/Taxes/DeleteATaxRequestTest.php
+++ b/tests/Requests/Taxes/DeleteATaxRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new DeleteATaxRequest(id: 3));
Saloon::assertSent(DeleteATaxRequest::class);
-});
+})->group('taxes');
diff --git a/tests/Requests/Taxes/FetchAListOfTaxesRequestTest.php b/tests/Requests/Taxes/FetchAListOfTaxesRequestTest.php
index 42f19d6..dbfd531 100644
--- a/tests/Requests/Taxes/FetchAListOfTaxesRequestTest.php
+++ b/tests/Requests/Taxes/FetchAListOfTaxesRequestTest.php
@@ -19,5 +19,5 @@
Saloon::assertSent(FetchAListOfTaxesRequest::class);
expect($response->dto())->toBeInstanceOf(Collection::class)
- ->and($response->dto()->count())->toBe(26);
-});
+ ->and($response->dto()->count())->toBe(expected: 25);
+})->group('taxes');
diff --git a/tests/Requests/Taxes/FetchATaxRequestTest.php b/tests/Requests/Taxes/FetchATaxRequestTest.php
index 1bb2088..8e87c2c 100644
--- a/tests/Requests/Taxes/FetchATaxRequestTest.php
+++ b/tests/Requests/Taxes/FetchATaxRequestTest.php
@@ -16,4 +16,4 @@
$response = $connector->send(new FetchATaxRequest(id: 3));
Saloon::assertSent(FetchATaxRequest::class);
-});
+})->group('taxes');
diff --git a/tests/Requests/Users/FetchAListOfUsersRequestTest.php b/tests/Requests/Users/FetchAListOfUsersRequestTest.php
index a45d601..bfd6417 100644
--- a/tests/Requests/Users/FetchAListOfUsersRequestTest.php
+++ b/tests/Requests/Users/FetchAListOfUsersRequestTest.php
@@ -20,4 +20,4 @@
expect($response->dto())->toBeInstanceOf(Collection::class)
->and($response->dto()->count())->toBe(1);
-});
+})->group('users');
diff --git a/tests/Requests/Users/FetchAuthenticatedUserRequestTest.php b/tests/Requests/Users/FetchAuthenticatedUserRequestTest.php
index 101dbcf..e5b6f48 100644
--- a/tests/Requests/Users/FetchAuthenticatedUserRequestTest.php
+++ b/tests/Requests/Users/FetchAuthenticatedUserRequestTest.php
@@ -19,4 +19,4 @@
Saloon::assertSent(FetchAuthenticatedUserRequest::class);
expect($response->dto())->toBeInstanceOf(UserDTO::class);
-});
+})->group('users');