// Package contract provides primitives to interact with the openapi HTTP API.
//
// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.0 DO NOT EDIT.
package contract

import (
	"encoding/json"
	"fmt"
	"net/http"
	"time"

	"github.com/go-chi/chi/v5"
	"github.com/oapi-codegen/runtime"
	openapi_types "github.com/oapi-codegen/runtime/types"
)

// Defines values for APITokenRequestScopes.
const (
	OrganizationRead  APITokenRequestScopes = "organization:read"
	PartyLedgerRead   APITokenRequestScopes = "party:ledger:read"
	PartyRead         APITokenRequestScopes = "party:read"
	SecurityAuditRead APITokenRequestScopes = "security:audit:read"
	SecurityUsersRead APITokenRequestScopes = "security:users:read"
)

// Defines values for CommercialAllocationType.
const (
	CommercialAllocationTypeFULFILLMENT CommercialAllocationType = "FULFILLMENT"
	CommercialAllocationTypeINVOICING   CommercialAllocationType = "INVOICING"
	CommercialAllocationTypeRETURN      CommercialAllocationType = "RETURN"
)

// Defines values for CommercialDocumentFulfillmentStatus.
const (
	CommercialDocumentFulfillmentStatusFULFILLED          CommercialDocumentFulfillmentStatus = "FULFILLED"
	CommercialDocumentFulfillmentStatusPARTIALLYFULFILLED CommercialDocumentFulfillmentStatus = "PARTIALLY_FULFILLED"
	CommercialDocumentFulfillmentStatusUNFULFILLED        CommercialDocumentFulfillmentStatus = "UNFULFILLED"
)

// Defines values for CommercialDocumentInvoicingStatus.
const (
	CommercialDocumentInvoicingStatusINVOICED          CommercialDocumentInvoicingStatus = "INVOICED"
	CommercialDocumentInvoicingStatusPARTIALLYINVOICED CommercialDocumentInvoicingStatus = "PARTIALLY_INVOICED"
	CommercialDocumentInvoicingStatusUNINVOICED        CommercialDocumentInvoicingStatus = "UNINVOICED"
)

// Defines values for CommercialDocumentKind.
const (
	CommercialDocumentKindSALESDISPATCH CommercialDocumentKind = "SALES_DISPATCH"
	CommercialDocumentKindSALESINVOICE  CommercialDocumentKind = "SALES_INVOICE"
	CommercialDocumentKindSALESORDER    CommercialDocumentKind = "SALES_ORDER"
	CommercialDocumentKindSALESQUOTE    CommercialDocumentKind = "SALES_QUOTE"
	CommercialDocumentKindSALESRETURN   CommercialDocumentKind = "SALES_RETURN"
)

// Defines values for CommercialDocumentLifecycleStatus.
const (
	CommercialDocumentLifecycleStatusACCEPTED  CommercialDocumentLifecycleStatus = "ACCEPTED"
	CommercialDocumentLifecycleStatusCANCELLED CommercialDocumentLifecycleStatus = "CANCELLED"
	CommercialDocumentLifecycleStatusDRAFT     CommercialDocumentLifecycleStatus = "DRAFT"
	CommercialDocumentLifecycleStatusEXPIRED   CommercialDocumentLifecycleStatus = "EXPIRED"
	CommercialDocumentLifecycleStatusFINALIZED CommercialDocumentLifecycleStatus = "FINALIZED"
	CommercialDocumentLifecycleStatusOPEN      CommercialDocumentLifecycleStatus = "OPEN"
	CommercialDocumentLifecycleStatusREJECTED  CommercialDocumentLifecycleStatus = "REJECTED"
	CommercialDocumentLifecycleStatusSENT      CommercialDocumentLifecycleStatus = "SENT"
)

// Defines values for CommercialDocumentPaymentStatus.
const (
	CommercialDocumentPaymentStatusPAID          CommercialDocumentPaymentStatus = "PAID"
	CommercialDocumentPaymentStatusPARTIALLYPAID CommercialDocumentPaymentStatus = "PARTIALLY_PAID"
	CommercialDocumentPaymentStatusUNPAID        CommercialDocumentPaymentStatus = "UNPAID"
)

// Defines values for CommercialDocumentSourceKind.
const (
	CommercialDocumentSourceKindDIRECT   CommercialDocumentSourceKind = "DIRECT"
	CommercialDocumentSourceKindDISPATCH CommercialDocumentSourceKind = "DISPATCH"
	CommercialDocumentSourceKindINVOICE  CommercialDocumentSourceKind = "INVOICE"
	CommercialDocumentSourceKindORDER    CommercialDocumentSourceKind = "ORDER"
	CommercialDocumentSourceKindQUOTE    CommercialDocumentSourceKind = "QUOTE"
	CommercialDocumentSourceKindRECEIPT  CommercialDocumentSourceKind = "RECEIPT"
)

// Defines values for CommercialDocumentStatus.
const (
	CommercialDocumentStatusACCEPTED           CommercialDocumentStatus = "ACCEPTED"
	CommercialDocumentStatusCANCELLED          CommercialDocumentStatus = "CANCELLED"
	CommercialDocumentStatusCONFIRMED          CommercialDocumentStatus = "CONFIRMED"
	CommercialDocumentStatusDRAFT              CommercialDocumentStatus = "DRAFT"
	CommercialDocumentStatusEXPIRED            CommercialDocumentStatus = "EXPIRED"
	CommercialDocumentStatusFULFILLED          CommercialDocumentStatus = "FULFILLED"
	CommercialDocumentStatusPARTIALLYFULFILLED CommercialDocumentStatus = "PARTIALLY_FULFILLED"
	CommercialDocumentStatusPOSTED             CommercialDocumentStatus = "POSTED"
	CommercialDocumentStatusREJECTED           CommercialDocumentStatus = "REJECTED"
	CommercialDocumentStatusSENT               CommercialDocumentStatus = "SENT"
)

// Defines values for CommercialDocumentInputSourceKind.
const (
	CommercialDocumentInputSourceKindDIRECT   CommercialDocumentInputSourceKind = "DIRECT"
	CommercialDocumentInputSourceKindDISPATCH CommercialDocumentInputSourceKind = "DISPATCH"
	CommercialDocumentInputSourceKindINVOICE  CommercialDocumentInputSourceKind = "INVOICE"
	CommercialDocumentInputSourceKindORDER    CommercialDocumentInputSourceKind = "ORDER"
	CommercialDocumentInputSourceKindQUOTE    CommercialDocumentInputSourceKind = "QUOTE"
	CommercialDocumentInputSourceKindRECEIPT  CommercialDocumentInputSourceKind = "RECEIPT"
)

// Defines values for CommercialLineLineType.
const (
	CommercialLineLineTypePRODUCT CommercialLineLineType = "PRODUCT"
	CommercialLineLineTypeSERVICE CommercialLineLineType = "SERVICE"
)

// Defines values for CommercialLineInputLineType.
const (
	CommercialLineInputLineTypePRODUCT CommercialLineInputLineType = "PRODUCT"
	CommercialLineInputLineTypeSERVICE CommercialLineInputLineType = "SERVICE"
)

// Defines values for CompanySettingsRequestDuplicatePartyTaxNumberPolicy.
const (
	CompanySettingsRequestDuplicatePartyTaxNumberPolicyALLOW CompanySettingsRequestDuplicatePartyTaxNumberPolicy = "ALLOW"
	CompanySettingsRequestDuplicatePartyTaxNumberPolicyBLOCK CompanySettingsRequestDuplicatePartyTaxNumberPolicy = "BLOCK"
	CompanySettingsRequestDuplicatePartyTaxNumberPolicyWARN  CompanySettingsRequestDuplicatePartyTaxNumberPolicy = "WARN"
)

// Defines values for CompanySettingsRequestEntityType.
const (
	CompanySettingsRequestEntityTypeLEGALENTITY    CompanySettingsRequestEntityType = "LEGAL_ENTITY"
	CompanySettingsRequestEntityTypeSOLEPROPRIETOR CompanySettingsRequestEntityType = "SOLE_PROPRIETOR"
)

// Defines values for CompanySummaryDuplicatePartyTaxNumberPolicy.
const (
	CompanySummaryDuplicatePartyTaxNumberPolicyALLOW CompanySummaryDuplicatePartyTaxNumberPolicy = "ALLOW"
	CompanySummaryDuplicatePartyTaxNumberPolicyBLOCK CompanySummaryDuplicatePartyTaxNumberPolicy = "BLOCK"
	CompanySummaryDuplicatePartyTaxNumberPolicyWARN  CompanySummaryDuplicatePartyTaxNumberPolicy = "WARN"
)

// Defines values for CompanySummaryEntityType.
const (
	CompanySummaryEntityTypeLEGALENTITY    CompanySummaryEntityType = "LEGAL_ENTITY"
	CompanySummaryEntityTypeSOLEPROPRIETOR CompanySummaryEntityType = "SOLE_PROPRIETOR"
)

// Defines values for DashboardRecentEntryKind.
const (
	DashboardRecentEntryKindDocument DashboardRecentEntryKind = "document"
	DashboardRecentEntryKindLedger   DashboardRecentEntryKind = "ledger"
	DashboardRecentEntryKindStock    DashboardRecentEntryKind = "stock"
)

// Defines values for DocumentSettlementPaymentStatus.
const (
	DocumentSettlementPaymentStatusPAID          DocumentSettlementPaymentStatus = "PAID"
	DocumentSettlementPaymentStatusPARTIALLYPAID DocumentSettlementPaymentStatus = "PARTIALLY_PAID"
	DocumentSettlementPaymentStatusUNPAID        DocumentSettlementPaymentStatus = "UNPAID"
)

// Defines values for DocumentSettlementReturnStatus.
const (
	DocumentSettlementReturnStatusFULL    DocumentSettlementReturnStatus = "FULL"
	DocumentSettlementReturnStatusNONE    DocumentSettlementReturnStatus = "NONE"
	DocumentSettlementReturnStatusPARTIAL DocumentSettlementReturnStatus = "PARTIAL"
)

// Defines values for EmployeeAdvanceCurrency.
const (
	TRY EmployeeAdvanceCurrency = "TRY"
)

// Defines values for EmployeeAdvanceStatus.
const (
	EmployeeAdvanceStatusCLOSED     EmployeeAdvanceStatus = "CLOSED"
	EmployeeAdvanceStatusOPEN       EmployeeAdvanceStatus = "OPEN"
	EmployeeAdvanceStatusREVERSED   EmployeeAdvanceStatus = "REVERSED"
	EmployeeAdvanceStatusWRITTENOFF EmployeeAdvanceStatus = "WRITTEN_OFF"
)

// Defines values for EmployeeAdvanceTransactionType.
const (
	DISBURSEMENT EmployeeAdvanceTransactionType = "DISBURSEMENT"
	REPAYMENT    EmployeeAdvanceTransactionType = "REPAYMENT"
	REVERSAL     EmployeeAdvanceTransactionType = "REVERSAL"
	WRITEOFF     EmployeeAdvanceTransactionType = "WRITE_OFF"
)

// Defines values for ExchangeRateSource.
const (
	ExchangeRateSourceECB    ExchangeRateSource = "ECB"
	ExchangeRateSourceMANUAL ExchangeRateSource = "MANUAL"
	ExchangeRateSourceTCMB   ExchangeRateSource = "TCMB"
)

// Defines values for ExchangeRateSettingsSourcePreference.
const (
	ExchangeRateSettingsSourcePreferenceAUTO ExchangeRateSettingsSourcePreference = "AUTO"
	ExchangeRateSettingsSourcePreferenceECB  ExchangeRateSettingsSourcePreference = "ECB"
	ExchangeRateSettingsSourcePreferenceTCMB ExchangeRateSettingsSourcePreference = "TCMB"
)

// Defines values for ExchangeRateSettingsInputSourcePreference.
const (
	AUTO ExchangeRateSettingsInputSourcePreference = "AUTO"
	ECB  ExchangeRateSettingsInputSourcePreference = "ECB"
	TCMB ExchangeRateSettingsInputSourcePreference = "TCMB"
)

// Defines values for ExportJobFormat.
const (
	CSV  ExportJobFormat = "CSV"
	XLSX ExportJobFormat = "XLSX"
)

// Defines values for ExportJobStatus.
const (
	ExportJobStatusCOMPLETED ExportJobStatus = "COMPLETED"
	ExportJobStatusFAILED    ExportJobStatus = "FAILED"
	ExportJobStatusQUEUED    ExportJobStatus = "QUEUED"
	ExportJobStatusRUNNING   ExportJobStatus = "RUNNING"
)

// Defines values for FinanceAccountAccountType.
const (
	FinanceAccountAccountTypeBANK FinanceAccountAccountType = "BANK"
	FinanceAccountAccountTypeCASH FinanceAccountAccountType = "CASH"
)

// Defines values for FinanceAccountMovementRequestDirection.
const (
	FinanceAccountMovementRequestDirectionIN  FinanceAccountMovementRequestDirection = "IN"
	FinanceAccountMovementRequestDirectionOUT FinanceAccountMovementRequestDirection = "OUT"
)

// Defines values for GlobalSearchItemType.
const (
	GlobalSearchItemTypeDocument GlobalSearchItemType = "document"
	GlobalSearchItemTypeParty    GlobalSearchItemType = "party"
	GlobalSearchItemTypeProduct  GlobalSearchItemType = "product"
)

// Defines values for HealthResponseService.
const (
	Api HealthResponseService = "api"
)

// Defines values for HealthResponseStatus.
const (
	Ok HealthResponseStatus = "ok"
)

// Defines values for ImportEntityType.
const (
	ImportEntityTypeBARCODE      ImportEntityType = "BARCODE"
	ImportEntityTypeOPENINGSTOCK ImportEntityType = "OPENING_STOCK"
	ImportEntityTypePRICELIST    ImportEntityType = "PRICE_LIST"
	ImportEntityTypePRODUCT      ImportEntityType = "PRODUCT"
	ImportEntityTypeSTOCKCOUNT   ImportEntityType = "STOCK_COUNT"
	ImportEntityTypeVARIANT      ImportEntityType = "VARIANT"
	ImportEntityTypeWAREHOUSE    ImportEntityType = "WAREHOUSE"
)

// Defines values for ImportJobCommitMode.
const (
	ATOMIC ImportJobCommitMode = "ATOMIC"
)

// Defines values for ImportJobDirection.
const (
	EXPORT ImportJobDirection = "EXPORT"
	IMPORT ImportJobDirection = "IMPORT"
)

// Defines values for ImportJobStatus.
const (
	ImportJobStatusANALYZING ImportJobStatus = "ANALYZING"
	ImportJobStatusCOMMITTED ImportJobStatus = "COMMITTED"
	ImportJobStatusFAILED    ImportJobStatus = "FAILED"
	ImportJobStatusREADY     ImportJobStatus = "READY"
	ImportJobStatusUPLOADED  ImportJobStatus = "UPLOADED"
)

// Defines values for InvoiceRequestDocumentTypeCode.
const (
	InvoiceRequestDocumentTypeCodePURCHASEINVOICE       InvoiceRequestDocumentTypeCode = "PURCHASE_INVOICE"
	InvoiceRequestDocumentTypeCodePURCHASERETURNINVOICE InvoiceRequestDocumentTypeCode = "PURCHASE_RETURN_INVOICE"
	InvoiceRequestDocumentTypeCodeSALESINVOICE          InvoiceRequestDocumentTypeCode = "SALES_INVOICE"
	InvoiceRequestDocumentTypeCodeSALESRETURNINVOICE    InvoiceRequestDocumentTypeCode = "SALES_RETURN_INVOICE"
)

// Defines values for OpenItemSide.
const (
	OpenItemSidePAYABLE    OpenItemSide = "PAYABLE"
	OpenItemSideRECEIVABLE OpenItemSide = "RECEIVABLE"
)

// Defines values for PartyKind.
const (
	PartyKindORGANIZATION PartyKind = "ORGANIZATION"
	PartyKindPERSON       PartyKind = "PERSON"
)

// Defines values for PartyRiskPolicy.
const (
	PartyRiskPolicyALLOW PartyRiskPolicy = "ALLOW"
	PartyRiskPolicyBLOCK PartyRiskPolicy = "BLOCK"
	PartyRiskPolicyWARN  PartyRiskPolicy = "WARN"
)

// Defines values for PartyAgingRowSide.
const (
	PartyAgingRowSidePAYABLE    PartyAgingRowSide = "PAYABLE"
	PartyAgingRowSideRECEIVABLE PartyAgingRowSide = "RECEIVABLE"
)

// Defines values for PartyCustomFieldFieldType.
const (
	BOOLEAN PartyCustomFieldFieldType = "BOOLEAN"
	DATE    PartyCustomFieldFieldType = "DATE"
	NUMBER  PartyCustomFieldFieldType = "NUMBER"
	SELECT  PartyCustomFieldFieldType = "SELECT"
	TEXT    PartyCustomFieldFieldType = "TEXT"
)

// Defines values for PartyInputKind.
const (
	PartyInputKindORGANIZATION PartyInputKind = "ORGANIZATION"
	PartyInputKindPERSON       PartyInputKind = "PERSON"
)

// Defines values for PartyInputRiskPolicy.
const (
	PartyInputRiskPolicyALLOW PartyInputRiskPolicy = "ALLOW"
	PartyInputRiskPolicyBLOCK PartyInputRiskPolicy = "BLOCK"
	PartyInputRiskPolicyWARN  PartyInputRiskPolicy = "WARN"
)

// Defines values for PaymentPlanInstallmentsStatus.
const (
	PaymentPlanInstallmentsStatusCANCELLED PaymentPlanInstallmentsStatus = "CANCELLED"
	PaymentPlanInstallmentsStatusCLOSED    PaymentPlanInstallmentsStatus = "CLOSED"
	PaymentPlanInstallmentsStatusOVERDUE   PaymentPlanInstallmentsStatus = "OVERDUE"
	PaymentPlanInstallmentsStatusPARTIAL   PaymentPlanInstallmentsStatus = "PARTIAL"
	PaymentPlanInstallmentsStatusPENDING   PaymentPlanInstallmentsStatus = "PENDING"
)

// Defines values for PaymentPlanSide.
const (
	PaymentPlanSidePAYABLE    PaymentPlanSide = "PAYABLE"
	PaymentPlanSideRECEIVABLE PaymentPlanSide = "RECEIVABLE"
)

// Defines values for PaymentPlanInputSide.
const (
	PaymentPlanInputSidePAYABLE    PaymentPlanInputSide = "PAYABLE"
	PaymentPlanInputSideRECEIVABLE PaymentPlanInputSide = "RECEIVABLE"
)

// Defines values for PaymentPlanSummaryStatus.
const (
	PaymentPlanSummaryStatusCANCELLED PaymentPlanSummaryStatus = "CANCELLED"
	PaymentPlanSummaryStatusCLOSED    PaymentPlanSummaryStatus = "CLOSED"
	PaymentPlanSummaryStatusOPEN      PaymentPlanSummaryStatus = "OPEN"
)

// Defines values for PaymentRequestPaymentKind.
const (
	COLLECTION PaymentRequestPaymentKind = "COLLECTION"
	PAYMENT    PaymentRequestPaymentKind = "PAYMENT"
)

// Defines values for PaymentRequestPaymentMethod.
const (
	PaymentRequestPaymentMethodBANK PaymentRequestPaymentMethod = "BANK"
	PaymentRequestPaymentMethodCASH PaymentRequestPaymentMethod = "CASH"
)

// Defines values for PriceListRoundPolicy.
const (
	DOWN     PriceListRoundPolicy = "DOWN"
	HALFEVEN PriceListRoundPolicy = "HALF_EVEN"
	HALFUP   PriceListRoundPolicy = "HALF_UP"
	UP       PriceListRoundPolicy = "UP"
)

// Defines values for PriceListTaxMode.
const (
	EXCLUSIVE PriceListTaxMode = "EXCLUSIVE"
	INCLUSIVE PriceListTaxMode = "INCLUSIVE"
)

// Defines values for ProductKind.
const (
	ProductKindPHYSICAL ProductKind = "PHYSICAL"
	ProductKindSERVICE  ProductKind = "SERVICE"
)

// Defines values for ProductImageOriginalContentType.
const (
	ProductImageOriginalContentTypeImagejpeg ProductImageOriginalContentType = "image/jpeg"
	ProductImageOriginalContentTypeImagepng  ProductImageOriginalContentType = "image/png"
	ProductImageOriginalContentTypeImagewebp ProductImageOriginalContentType = "image/webp"
)

// Defines values for ProductImageVariantContentType.
const (
	ProductImageVariantContentTypeImagewebp ProductImageVariantContentType = "image/webp"
)

// Defines values for ProductImageVariantName.
const (
	Master ProductImageVariantName = "master"
	N128   ProductImageVariantName = "128"
	N1600  ProductImageVariantName = "1600"
	N320   ProductImageVariantName = "320"
	N768   ProductImageVariantName = "768"
)

// Defines values for ProductInputKind.
const (
	ProductInputKindPHYSICAL ProductInputKind = "PHYSICAL"
	ProductInputKindSERVICE  ProductInputKind = "SERVICE"
)

// Defines values for PurchaseInvoiceInputLinesLineType.
const (
	PurchaseInvoiceInputLinesLineTypePRODUCT PurchaseInvoiceInputLinesLineType = "PRODUCT"
	PurchaseInvoiceInputLinesLineTypeSERVICE PurchaseInvoiceInputLinesLineType = "SERVICE"
)

// Defines values for PurchaseListItemFulfillmentStatus.
const (
	PurchaseListItemFulfillmentStatusFULFILLED          PurchaseListItemFulfillmentStatus = "FULFILLED"
	PurchaseListItemFulfillmentStatusPARTIALLYFULFILLED PurchaseListItemFulfillmentStatus = "PARTIALLY_FULFILLED"
	PurchaseListItemFulfillmentStatusUNFULFILLED        PurchaseListItemFulfillmentStatus = "UNFULFILLED"
)

// Defines values for PurchaseListItemInvoicingStatus.
const (
	PurchaseListItemInvoicingStatusINVOICED          PurchaseListItemInvoicingStatus = "INVOICED"
	PurchaseListItemInvoicingStatusPARTIALLYINVOICED PurchaseListItemInvoicingStatus = "PARTIALLY_INVOICED"
	PurchaseListItemInvoicingStatusUNINVOICED        PurchaseListItemInvoicingStatus = "UNINVOICED"
)

// Defines values for PurchaseListItemKind.
const (
	GOODSRECEIPT    PurchaseListItemKind = "GOODS_RECEIPT"
	PURCHASEINVOICE PurchaseListItemKind = "PURCHASE_INVOICE"
	PURCHASEORDER   PurchaseListItemKind = "PURCHASE_ORDER"
	PURCHASERETURN  PurchaseListItemKind = "PURCHASE_RETURN"
)

// Defines values for PurchaseListItemLifecycleStatus.
const (
	PurchaseListItemLifecycleStatusCANCELLED PurchaseListItemLifecycleStatus = "CANCELLED"
	PurchaseListItemLifecycleStatusDRAFT     PurchaseListItemLifecycleStatus = "DRAFT"
	PurchaseListItemLifecycleStatusFINALIZED PurchaseListItemLifecycleStatus = "FINALIZED"
	PurchaseListItemLifecycleStatusOPEN      PurchaseListItemLifecycleStatus = "OPEN"
)

// Defines values for PurchaseListItemPaymentStatus.
const (
	PurchaseListItemPaymentStatusPAID          PurchaseListItemPaymentStatus = "PAID"
	PurchaseListItemPaymentStatusPARTIALLYPAID PurchaseListItemPaymentStatus = "PARTIALLY_PAID"
	PurchaseListItemPaymentStatusUNPAID        PurchaseListItemPaymentStatus = "UNPAID"
)

// Defines values for PurchaseOrderInputLinesLineType.
const (
	PRODUCT PurchaseOrderInputLinesLineType = "PRODUCT"
	SERVICE PurchaseOrderInputLinesLineType = "SERVICE"
)

// Defines values for PurchaseOrderInputOverDeliveryPolicy.
const (
	ALLOW PurchaseOrderInputOverDeliveryPolicy = "ALLOW"
	BLOCK PurchaseOrderInputOverDeliveryPolicy = "BLOCK"
	WARN  PurchaseOrderInputOverDeliveryPolicy = "WARN"
)

// Defines values for SetupRequestEntityType.
const (
	LEGALENTITY    SetupRequestEntityType = "LEGAL_ENTITY"
	SOLEPROPRIETOR SetupRequestEntityType = "SOLE_PROPRIETOR"
)

// Defines values for SourceDocumentReferenceDirection.
const (
	SOURCE SourceDocumentReferenceDirection = "SOURCE"
	TARGET SourceDocumentReferenceDirection = "TARGET"
)

// Defines values for SourceDocumentReferenceRelationType.
const (
	SourceDocumentReferenceRelationTypeCONVERSION  SourceDocumentReferenceRelationType = "CONVERSION"
	SourceDocumentReferenceRelationTypeFULFILLMENT SourceDocumentReferenceRelationType = "FULFILLMENT"
	SourceDocumentReferenceRelationTypeINVOICING   SourceDocumentReferenceRelationType = "INVOICING"
	SourceDocumentReferenceRelationTypeRELATED     SourceDocumentReferenceRelationType = "RELATED"
	SourceDocumentReferenceRelationTypeRETURN      SourceDocumentReferenceRelationType = "RETURN"
)

// Defines values for StockCountEngineMovementPolicy.
const (
	CONTINUE  StockCountEngineMovementPolicy = "CONTINUE"
	LOCKSCOPE StockCountEngineMovementPolicy = "LOCK_SCOPE"
)

// Defines values for StockCountEngineScopeMode.
const (
	FULL    StockCountEngineScopeMode = "FULL"
	PARTIAL StockCountEngineScopeMode = "PARTIAL"
)

// Defines values for StockCountEngineState.
const (
	StockCountEngineStateCANCELLED  StockCountEngineState = "CANCELLED"
	StockCountEngineStateINPROGRESS StockCountEngineState = "IN_PROGRESS"
	StockCountEngineStatePOSTED     StockCountEngineState = "POSTED"
	StockCountEngineStateREVIEW     StockCountEngineState = "REVIEW"
)

// Defines values for StockCountEngineStatus.
const (
	StockCountEngineStatusCANCELLED  StockCountEngineStatus = "CANCELLED"
	StockCountEngineStatusINPROGRESS StockCountEngineStatus = "IN_PROGRESS"
	StockCountEngineStatusPOSTED     StockCountEngineStatus = "POSTED"
	StockCountEngineStatusREVIEW     StockCountEngineStatus = "REVIEW"
)

// Defines values for StockCountPassMode.
const (
	StockCountPassModeOPEN StockCountPassMode = "OPEN"
)

// Defines values for StockCountPassState.
const (
	CANCELLED  StockCountPassState = "CANCELLED"
	COMPLETED  StockCountPassState = "COMPLETED"
	INPROGRESS StockCountPassState = "IN_PROGRESS"
)

// Defines values for StockMovementRequestDirection.
const (
	StockMovementRequestDirectionIN  StockMovementRequestDirection = "IN"
	StockMovementRequestDirectionOUT StockMovementRequestDirection = "OUT"
)

// Defines values for TaxDefinitionCalculationType.
const (
	TaxDefinitionCalculationTypePERCENTAGE    TaxDefinitionCalculationType = "PERCENTAGE"
	TaxDefinitionCalculationTypeQUANTITYBASED TaxDefinitionCalculationType = "QUANTITY_BASED"
)

// Defines values for TaxOfficeReferenceOfficeType.
const (
	Defterdarlık          TaxOfficeReferenceOfficeType = "Defterdarlık"
	Malmüdürlüğü          TaxOfficeReferenceOfficeType = "Malmüdürlüğü"
	VergiDairesiMüdürlüğü TaxOfficeReferenceOfficeType = "Vergi Dairesi Müdürlüğü"
	Şube                  TaxOfficeReferenceOfficeType = "Şube"
)

// Defines values for TaxRateCalculationType.
const (
	TaxRateCalculationTypePERCENTAGE    TaxRateCalculationType = "PERCENTAGE"
	TaxRateCalculationTypeQUANTITYBASED TaxRateCalculationType = "QUANTITY_BASED"
)

// Defines values for TransferRequestTransferType.
const (
	QUICK    TransferRequestTransferType = "QUICK"
	WORKFLOW TransferRequestTransferType = "WORKFLOW"
)

// Defines values for WarehouseType.
const (
	WarehouseTypeQUARANTINE WarehouseType = "QUARANTINE"
	WarehouseTypeRETURN     WarehouseType = "RETURN"
	WarehouseTypeSTANDARD   WarehouseType = "STANDARD"
	WarehouseTypeTRANSIT    WarehouseType = "TRANSIT"
)

// Defines values for WarehouseInputType.
const (
	WarehouseInputTypeQUARANTINE WarehouseInputType = "QUARANTINE"
	WarehouseInputTypeRETURN     WarehouseInputType = "RETURN"
	WarehouseInputTypeSTANDARD   WarehouseInputType = "STANDARD"
	WarehouseInputTypeTRANSIT    WarehouseInputType = "TRANSIT"
)

// Defines values for WarehouseUpdateInputType.
const (
	QUARANTINE WarehouseUpdateInputType = "QUARANTINE"
	RETURN     WarehouseUpdateInputType = "RETURN"
	STANDARD   WarehouseUpdateInputType = "STANDARD"
	TRANSIT    WarehouseUpdateInputType = "TRANSIT"
)

// Defines values for CommercialCommand.
const (
	Accept   CommercialCommand = "accept"
	Cancel   CommercialCommand = "cancel"
	Confirm  CommercialCommand = "confirm"
	Finalize CommercialCommand = "finalize"
	Post     CommercialCommand = "post"
	Reject   CommercialCommand = "reject"
	Send     CommercialCommand = "send"
)

// Defines values for CommercialFulfillmentFilter.
const (
	CommercialFulfillmentFilterFULFILLED          CommercialFulfillmentFilter = "FULFILLED"
	CommercialFulfillmentFilterPARTIALLYFULFILLED CommercialFulfillmentFilter = "PARTIALLY_FULFILLED"
	CommercialFulfillmentFilterUNFULFILLED        CommercialFulfillmentFilter = "UNFULFILLED"
)

// Defines values for CommercialInvoicingFilter.
const (
	INVOICED          CommercialInvoicingFilter = "INVOICED"
	PARTIALLYINVOICED CommercialInvoicingFilter = "PARTIALLY_INVOICED"
	UNINVOICED        CommercialInvoicingFilter = "UNINVOICED"
)

// Defines values for CommercialLifecycleFilter.
const (
	CommercialLifecycleFilterACCEPTED  CommercialLifecycleFilter = "ACCEPTED"
	CommercialLifecycleFilterCANCELLED CommercialLifecycleFilter = "CANCELLED"
	CommercialLifecycleFilterDRAFT     CommercialLifecycleFilter = "DRAFT"
	CommercialLifecycleFilterEXPIRED   CommercialLifecycleFilter = "EXPIRED"
	CommercialLifecycleFilterFINALIZED CommercialLifecycleFilter = "FINALIZED"
	CommercialLifecycleFilterOPEN      CommercialLifecycleFilter = "OPEN"
	CommercialLifecycleFilterREJECTED  CommercialLifecycleFilter = "REJECTED"
	CommercialLifecycleFilterSENT      CommercialLifecycleFilter = "SENT"
)

// Defines values for CommercialPaymentFilter.
const (
	CommercialPaymentFilterPAID          CommercialPaymentFilter = "PAID"
	CommercialPaymentFilterPARTIALLYPAID CommercialPaymentFilter = "PARTIALLY_PAID"
	CommercialPaymentFilterUNPAID        CommercialPaymentFilter = "UNPAID"
)

// APITokenRequest defines model for APITokenRequest.
type APITokenRequest struct {
	ExpiresAt *time.Time              `json:"expires_at,omitempty"`
	Name      string                  `json:"name"`
	Scopes    []APITokenRequestScopes `json:"scopes"`
}

// APITokenRequestScopes defines model for APITokenRequest.Scopes.
type APITokenRequestScopes string

// AddressPreference defines model for AddressPreference.
type AddressPreference struct {
	DistrictId       *int64     `json:"district_id"`
	DistrictName     *string    `json:"district_name,omitempty"`
	NeighborhoodId   *int64     `json:"neighborhood_id"`
	NeighborhoodName *string    `json:"neighborhood_name,omitempty"`
	ProvinceId       *int64     `json:"province_id"`
	ProvinceName     *string    `json:"province_name,omitempty"`
	UpdatedAt        *time.Time `json:"updated_at,omitempty"`
	Version          int64      `json:"version"`
}

// AddressPreferenceRequest Province may be saved alone while cascading selection continues; nulling all fields clears the preference.
type AddressPreferenceRequest struct {
	DistrictId       *int64  `json:"district_id"`
	DistrictName     *string `json:"district_name"`
	NeighborhoodId   *int64  `json:"neighborhood_id"`
	NeighborhoodName *string `json:"neighborhood_name"`
	ProvinceId       *int64  `json:"province_id"`

	// ProvinceName Canonical name fallback when reference IDs are not installed
	ProvinceName *string `json:"province_name"`
}

// AddressReferenceList defines model for AddressReferenceList.
type AddressReferenceList struct {
	Items []AddressReferenceList_Items_Item `json:"items"`
}

// AddressReferenceList_Items_Item defines model for AddressReferenceList.items.Item.
type AddressReferenceList_Items_Item struct {
	union json.RawMessage
}

// CSRFRefreshResponse defines model for CSRFRefreshResponse.
type CSRFRefreshResponse struct {
	CsrfToken string `json:"csrf_token"`
}

// CommercialActionAvailability defines model for CommercialActionAvailability.
type CommercialActionAvailability struct {
	CanCancel          bool `json:"can_cancel"`
	CanCollect         bool `json:"can_collect"`
	CanCreateDispatch  bool `json:"can_create_dispatch"`
	CanCreateEdocument bool `json:"can_create_edocument"`
	CanCreateInvoice   bool `json:"can_create_invoice"`
	CanCreateReturn    bool `json:"can_create_return"`
	CanDelete          bool `json:"can_delete"`
	CanEdit            bool `json:"can_edit"`
	CanPay             bool `json:"can_pay"`
	CanPost            bool `json:"can_post"`
}

// CommercialAllocation defines model for CommercialAllocation.
type CommercialAllocation struct {
	// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
	BaseQuantity *Decimal `json:"base_quantity,omitempty"`

	// Quantity Exact base-10 decimal; never an IEEE-754 number.
	Quantity     Decimal                   `json:"quantity"`
	SourceLineId openapi_types.UUID        `json:"source_line_id"`
	TargetLineId *openapi_types.UUID       `json:"target_line_id,omitempty"`
	Type         *CommercialAllocationType `json:"type,omitempty"`
}

// CommercialAllocationType defines model for CommercialAllocation.Type.
type CommercialAllocationType string

// CommercialCommandBody defines model for CommercialCommandBody.
type CommercialCommandBody struct {
	Reason *string `json:"reason,omitempty"`
}

// CommercialDiscount defines model for CommercialDiscount.
type CommercialDiscount struct {
	// Amount Exact base-10 decimal; never an IEEE-754 number.
	Amount *Decimal `json:"amount,omitempty"`

	// Rate Exact base-10 decimal; never an IEEE-754 number.
	Rate *Decimal `json:"rate,omitempty"`
}

// CommercialDocument defines model for CommercialDocument.
type CommercialDocument struct {
	Allocations        *[]CommercialAllocation       `json:"allocations,omitempty"`
	AvailableActions   *CommercialActionAvailability `json:"available_actions,omitempty"`
	BranchId           openapi_types.UUID            `json:"branch_id"`
	CancellationReason *string                       `json:"cancellation_reason"`
	CancelledAt        *time.Time                    `json:"cancelled_at"`
	CompanyId          openapi_types.UUID            `json:"company_id"`
	CurrencyCode       string                        `json:"currency_code"`
	DefaultWarehouseId *openapi_types.UUID           `json:"default_warehouse_id,omitempty"`

	// DiscountTotal Exact base-10 decimal; never an IEEE-754 number.
	DiscountTotal    *Decimal           `json:"discount_total,omitempty"`
	DocumentDate     *time.Time         `json:"document_date,omitempty"`
	DocumentId       openapi_types.UUID `json:"document_id"`
	DocumentNo       string             `json:"document_no"`
	DocumentTypeCode string             `json:"document_type_code"`
	DueDate          *time.Time         `json:"due_date"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate      *Decimal                             `json:"exchange_rate,omitempty"`
	FinancePostingId  *openapi_types.UUID                  `json:"finance_posting_id"`
	FulfillmentAt     *time.Time                           `json:"fulfillment_at"`
	FulfillmentStatus *CommercialDocumentFulfillmentStatus `json:"fulfillment_status,omitempty"`

	// GrandTotal Exact base-10 decimal; never an IEEE-754 number.
	GrandTotal      *Decimal                           `json:"grand_total,omitempty"`
	Id              openapi_types.UUID                 `json:"id"`
	InvoicingStatus *CommercialDocumentInvoicingStatus `json:"invoicing_status,omitempty"`
	Kind            CommercialDocumentKind             `json:"kind"`
	LifecycleStatus *CommercialDocumentLifecycleStatus `json:"lifecycle_status,omitempty"`
	Lines           []CommercialLine                   `json:"lines"`
	Notes           *string                            `json:"notes,omitempty"`
	PartyId         openapi_types.UUID                 `json:"party_id"`

	// PayableTotal Exact base-10 decimal; never an IEEE-754 number.
	PayableTotal      *Decimal                         `json:"payable_total,omitempty"`
	PaymentStatus     *CommercialDocumentPaymentStatus `json:"payment_status,omitempty"`
	PostedAt          *time.Time                       `json:"posted_at"`
	PriceListId       *openapi_types.UUID              `json:"price_list_id,omitempty"`
	RelatedDocuments  *[]SourceDocumentReference       `json:"related_documents,omitempty"`
	Settlement        *DocumentSettlement              `json:"settlement,omitempty"`
	SourceDocumentId  *openapi_types.UUID              `json:"source_document_id,omitempty"`
	SourceDocumentIds *[]openapi_types.UUID            `json:"source_document_ids,omitempty"`
	SourceDocuments   *[]SourceDocumentReference       `json:"source_documents,omitempty"`
	SourceKind        *CommercialDocumentSourceKind    `json:"source_kind,omitempty"`
	Status            CommercialDocumentStatus         `json:"status"`

	// Subtotal Exact base-10 decimal; never an IEEE-754 number.
	Subtotal *Decimal `json:"subtotal,omitempty"`

	// TaxTotal Exact base-10 decimal; never an IEEE-754 number.
	TaxTotal   *Decimal   `json:"tax_total,omitempty"`
	ValidUntil *time.Time `json:"valid_until"`
	Version    int64      `json:"version"`

	// WithholdingTotal Exact base-10 decimal; never an IEEE-754 number.
	WithholdingTotal *Decimal `json:"withholding_total,omitempty"`
}

// CommercialDocumentFulfillmentStatus defines model for CommercialDocument.FulfillmentStatus.
type CommercialDocumentFulfillmentStatus string

// CommercialDocumentInvoicingStatus defines model for CommercialDocument.InvoicingStatus.
type CommercialDocumentInvoicingStatus string

// CommercialDocumentKind defines model for CommercialDocument.Kind.
type CommercialDocumentKind string

// CommercialDocumentLifecycleStatus defines model for CommercialDocument.LifecycleStatus.
type CommercialDocumentLifecycleStatus string

// CommercialDocumentPaymentStatus defines model for CommercialDocument.PaymentStatus.
type CommercialDocumentPaymentStatus string

// CommercialDocumentSourceKind defines model for CommercialDocument.SourceKind.
type CommercialDocumentSourceKind string

// CommercialDocumentStatus defines model for CommercialDocument.Status.
type CommercialDocumentStatus string

// CommercialDocumentInput defines model for CommercialDocumentInput.
type CommercialDocumentInput struct {
	Allocations        *[]CommercialAllocation `json:"allocations,omitempty"`
	BranchId           openapi_types.UUID      `json:"branch_id"`
	CurrencyCode       string                  `json:"currency_code"`
	DefaultWarehouseId *openapi_types.UUID     `json:"default_warehouse_id,omitempty"`
	DocumentDate       *time.Time              `json:"document_date,omitempty"`
	DocumentNo         *string                 `json:"document_no,omitempty"`
	DueDate            *time.Time              `json:"due_date"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate      *Decimal                           `json:"exchange_rate,omitempty"`
	Id                *openapi_types.UUID                `json:"id,omitempty"`
	Lines             []CommercialLineInput              `json:"lines"`
	Notes             *string                            `json:"notes,omitempty"`
	PartyId           openapi_types.UUID                 `json:"party_id"`
	PriceListId       *openapi_types.UUID                `json:"price_list_id,omitempty"`
	SourceDocumentId  *openapi_types.UUID                `json:"source_document_id,omitempty"`
	SourceDocumentIds *[]openapi_types.UUID              `json:"source_document_ids,omitempty"`
	SourceKind        *CommercialDocumentInputSourceKind `json:"source_kind,omitempty"`
	ValidUntil        *time.Time                         `json:"valid_until"`
}

// CommercialDocumentInputSourceKind defines model for CommercialDocumentInput.SourceKind.
type CommercialDocumentInputSourceKind string

// CommercialDocumentList defines model for CommercialDocumentList.
type CommercialDocumentList struct {
	Items      []CommercialDocument `json:"items"`
	NextCursor *string              `json:"next_cursor,omitempty"`
}

// CommercialLine defines model for CommercialLine.
type CommercialLine struct {
	// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
	BaseQuantity Decimal `json:"base_quantity"`

	// ConversionFactor Exact base-10 decimal; never an IEEE-754 number.
	ConversionFactor *Decimal `json:"conversion_factor,omitempty"`
	Description      *string  `json:"description,omitempty"`

	// DiscountAmount Exact base-10 decimal; never an IEEE-754 number.
	DiscountAmount     Decimal               `json:"discount_amount"`
	DiscountComponents *[]CommercialDiscount `json:"discount_components,omitempty"`

	// DiscountRate Exact base-10 decimal; never an IEEE-754 number.
	DiscountRate *Decimal `json:"discount_rate,omitempty"`

	// GrossAmount Exact base-10 decimal; never an IEEE-754 number.
	GrossAmount Decimal            `json:"gross_amount"`
	Id          openapi_types.UUID `json:"id"`
	LineNo      int                `json:"line_no"`

	// LineTotal Exact base-10 decimal; never an IEEE-754 number.
	LineTotal Decimal                `json:"line_total"`
	LineType  CommercialLineLineType `json:"line_type"`

	// NetAmount Exact base-10 decimal; never an IEEE-754 number.
	NetAmount Decimal `json:"net_amount"`

	// PayableAmount Exact base-10 decimal; never an IEEE-754 number.
	PayableAmount     Decimal                 `json:"payable_amount"`
	PriceListSnapshot *map[string]interface{} `json:"price_list_snapshot,omitempty"`
	PriceSource       *string                 `json:"price_source,omitempty"`
	ProductId         *openapi_types.UUID     `json:"product_id,omitempty"`

	// Quantity Exact base-10 decimal; never an IEEE-754 number.
	Quantity     Decimal             `json:"quantity"`
	SourceLineId *openapi_types.UUID `json:"source_line_id,omitempty"`

	// TaxAmount Exact base-10 decimal; never an IEEE-754 number.
	TaxAmount   Decimal `json:"tax_amount"`
	TaxIncluded *bool   `json:"tax_included,omitempty"`

	// TaxRate Exact base-10 decimal; never an IEEE-754 number.
	TaxRate     *Decimal                `json:"tax_rate,omitempty"`
	TaxSnapshot *map[string]interface{} `json:"tax_snapshot,omitempty"`
	UnitCode    string                  `json:"unit_code"`

	// UnitPrice Exact base-10 decimal; never an IEEE-754 number.
	UnitPrice Decimal `json:"unit_price"`

	// VariantAttributes Posted/draft line variant option snapshot.
	VariantAttributes *map[string]interface{} `json:"variant_attributes,omitempty"`

	// VariantCode Posted/draft line variant code snapshot.
	VariantCode *string             `json:"variant_code,omitempty"`
	VariantId   *openapi_types.UUID `json:"variant_id,omitempty"`
	WarehouseId *openapi_types.UUID `json:"warehouse_id,omitempty"`

	// WithholdingAmount Exact base-10 decimal; never an IEEE-754 number.
	WithholdingAmount *Decimal `json:"withholding_amount,omitempty"`

	// WithholdingRate Exact base-10 decimal; never an IEEE-754 number.
	WithholdingRate *Decimal `json:"withholding_rate,omitempty"`
}

// CommercialLineLineType defines model for CommercialLine.LineType.
type CommercialLineLineType string

// CommercialLineInput defines model for CommercialLineInput.
type CommercialLineInput struct {
	// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
	BaseQuantity *Decimal `json:"base_quantity,omitempty"`

	// ConversionFactor Exact base-10 decimal; never an IEEE-754 number.
	ConversionFactor *Decimal `json:"conversion_factor,omitempty"`
	Description      *string  `json:"description,omitempty"`

	// DiscountAmount Exact base-10 decimal; never an IEEE-754 number.
	DiscountAmount     *Decimal              `json:"discount_amount,omitempty"`
	DiscountComponents *[]CommercialDiscount `json:"discount_components,omitempty"`

	// DiscountRate Exact base-10 decimal; never an IEEE-754 number.
	DiscountRate      *Decimal                     `json:"discount_rate,omitempty"`
	Id                *openapi_types.UUID          `json:"id,omitempty"`
	LineNo            *int                         `json:"line_no,omitempty"`
	LineType          *CommercialLineInputLineType `json:"line_type,omitempty"`
	PriceListSnapshot *map[string]interface{}      `json:"price_list_snapshot,omitempty"`
	PriceSource       *string                      `json:"price_source,omitempty"`
	ProductId         *openapi_types.UUID          `json:"product_id,omitempty"`

	// Quantity Exact base-10 decimal; never an IEEE-754 number.
	Quantity     Decimal             `json:"quantity"`
	SourceLineId *openapi_types.UUID `json:"source_line_id,omitempty"`
	TaxIncluded  *bool               `json:"tax_included,omitempty"`

	// TaxRate Exact base-10 decimal; never an IEEE-754 number.
	TaxRate     *Decimal                `json:"tax_rate,omitempty"`
	TaxSnapshot *map[string]interface{} `json:"tax_snapshot,omitempty"`
	UnitCode    string                  `json:"unit_code"`

	// UnitPrice Exact base-10 decimal; never an IEEE-754 number.
	UnitPrice   Decimal             `json:"unit_price"`
	VariantId   *openapi_types.UUID `json:"variant_id,omitempty"`
	WarehouseId *openapi_types.UUID `json:"warehouse_id,omitempty"`

	// WithholdingRate Exact base-10 decimal; never an IEEE-754 number.
	WithholdingRate *Decimal `json:"withholding_rate,omitempty"`
}

// CommercialLineInputLineType defines model for CommercialLineInput.LineType.
type CommercialLineInputLineType string

// CompanySettingsRequest defines model for CompanySettingsRequest.
type CompanySettingsRequest struct {
	BaseCurrency string `json:"base_currency"`

	// DuplicatePartyTaxNumberPolicy Omitted by Phase 0.1 clients to retain the current policy
	DuplicatePartyTaxNumberPolicy *CompanySettingsRequestDuplicatePartyTaxNumberPolicy `json:"duplicate_party_tax_number_policy,omitempty"`
	EntityType                    CompanySettingsRequestEntityType                     `json:"entity_type"`
	LegalName                     string                                               `json:"legal_name"`
	PartyCodeDigits               *int                                                 `json:"party_code_digits,omitempty"`
	PartyCodePrefix               *string                                              `json:"party_code_prefix,omitempty"`
	TaxNumber                     *string                                              `json:"tax_number,omitempty"`
	Timezone                      string                                               `json:"timezone"`
	TradeName                     string                                               `json:"trade_name"`
}

// CompanySettingsRequestDuplicatePartyTaxNumberPolicy Omitted by Phase 0.1 clients to retain the current policy
type CompanySettingsRequestDuplicatePartyTaxNumberPolicy string

// CompanySettingsRequestEntityType defines model for CompanySettingsRequest.EntityType.
type CompanySettingsRequestEntityType string

// CompanySummary defines model for CompanySummary.
type CompanySummary struct {
	BaseCurrency                  string                                       `json:"base_currency"`
	DuplicatePartyTaxNumberPolicy *CompanySummaryDuplicatePartyTaxNumberPolicy `json:"duplicate_party_tax_number_policy,omitempty"`
	EntityType                    CompanySummaryEntityType                     `json:"entity_type"`
	Id                            openapi_types.UUID                           `json:"id"`
	LegalName                     string                                       `json:"legal_name"`
	PartyCodeDigits               *int                                         `json:"party_code_digits,omitempty"`
	PartyCodePrefix               *string                                      `json:"party_code_prefix,omitempty"`
	TaxNumber                     *string                                      `json:"tax_number,omitempty"`
	Timezone                      string                                       `json:"timezone"`
	TradeName                     string                                       `json:"trade_name"`
	Version                       int64                                        `json:"version"`
}

// CompanySummaryDuplicatePartyTaxNumberPolicy defines model for CompanySummary.DuplicatePartyTaxNumberPolicy.
type CompanySummaryDuplicatePartyTaxNumberPolicy string

// CompanySummaryEntityType defines model for CompanySummary.EntityType.
type CompanySummaryEntityType string

// Currency defines model for Currency.
type Currency struct {
	Code      string  `json:"code"`
	IsActive  *bool   `json:"is_active,omitempty"`
	MinorUnit *int    `json:"minor_unit,omitempty"`
	Name      string  `json:"name"`
	Source    string  `json:"source"`
	Symbol    *string `json:"symbol,omitempty"`
	Version   *int64  `json:"version,omitempty"`
}

// DashboardRecentEntry defines model for DashboardRecentEntry.
type DashboardRecentEntry struct {
	Amount     *string                  `json:"amount,omitempty"`
	Currency   *string                  `json:"currency,omitempty"`
	Direction  *string                  `json:"direction,omitempty"`
	EntryId    string                   `json:"entry_id"`
	Kind       DashboardRecentEntryKind `json:"kind"`
	Label      string                   `json:"label"`
	OccurredAt time.Time                `json:"occurred_at"`
	PartyName  *string                  `json:"party_name,omitempty"`
	RefId      *string                  `json:"ref_id,omitempty"`
	RefType    *string                  `json:"ref_type,omitempty"`

	// TitleCode Domain code (entry_type / movement_type / document_type_code).
	TitleCode string `json:"title_code"`
}

// DashboardRecentEntryKind defines model for DashboardRecentEntry.Kind.
type DashboardRecentEntryKind string

// DashboardShortcuts defines model for DashboardShortcuts.
type DashboardShortcuts struct {
	// PinnedShortcuts Stable shortcut keys, in display order. Empty when the user has no saved layout.
	PinnedShortcuts []string   `json:"pinned_shortcuts"`
	UpdatedAt       *time.Time `json:"updated_at,omitempty"`
	Version         *int64     `json:"version,omitempty"`
}

// Decimal Exact base-10 decimal; never an IEEE-754 number.
type Decimal = string

// DocumentSettlement defines model for DocumentSettlement.
type DocumentSettlement struct {
	// AmountDue Exact base-10 decimal; never an IEEE-754 number.
	AmountDue *Decimal `json:"amount_due,omitempty"`

	// AmountPayable Exact base-10 decimal; never an IEEE-754 number.
	AmountPayable *Decimal `json:"amount_payable,omitempty"`

	// CollectedTotal Exact base-10 decimal; never an IEEE-754 number.
	CollectedTotal *Decimal `json:"collected_total,omitempty"`

	// CustomerCredit Exact base-10 decimal; never an IEEE-754 number.
	CustomerCredit *Decimal `json:"customer_credit,omitempty"`

	// EffectiveInvoiceTotal Exact base-10 decimal; never an IEEE-754 number.
	EffectiveInvoiceTotal Decimal `json:"effective_invoice_total"`

	// InvoiceTotal Exact base-10 decimal; never an IEEE-754 number.
	InvoiceTotal Decimal `json:"invoice_total"`

	// PaidTotal Exact base-10 decimal; never an IEEE-754 number.
	PaidTotal     *Decimal                        `json:"paid_total,omitempty"`
	PaymentStatus DocumentSettlementPaymentStatus `json:"payment_status"`
	ReturnStatus  DocumentSettlementReturnStatus  `json:"return_status"`

	// ReturnedTotal Exact base-10 decimal; never an IEEE-754 number.
	ReturnedTotal Decimal `json:"returned_total"`

	// SupplierCredit Exact base-10 decimal; never an IEEE-754 number.
	SupplierCredit *Decimal `json:"supplier_credit,omitempty"`
}

// DocumentSettlementPaymentStatus defines model for DocumentSettlement.PaymentStatus.
type DocumentSettlementPaymentStatus string

// DocumentSettlementReturnStatus defines model for DocumentSettlement.ReturnStatus.
type DocumentSettlementReturnStatus string

// EmployeeAdvance defines model for EmployeeAdvance.
type EmployeeAdvance struct {
	AccountId                   openapi_types.UUID            `json:"account_id"`
	AccountName                 *string                       `json:"account_name,omitempty"`
	AdvanceDate                 openapi_types.Date            `json:"advance_date"`
	Currency                    EmployeeAdvanceCurrency       `json:"currency"`
	Description                 string                        `json:"description"`
	EmployeeCode                *string                       `json:"employee_code,omitempty"`
	EmployeeId                  openapi_types.UUID            `json:"employee_id"`
	EmployeeName                *string                       `json:"employee_name,omitempty"`
	ExpectedRepaymentDate       *openapi_types.Date           `json:"expected_repayment_date"`
	Id                          openapi_types.UUID            `json:"id"`
	OriginalAmount              TRYAmount                     `json:"original_amount"`
	OutstandingAmount           TRYAmount                     `json:"outstanding_amount"`
	Reference                   *string                       `json:"reference,omitempty"`
	RepaidAmount                TRYAmount                     `json:"repaid_amount"`
	RequiresAccountingTaxReview bool                          `json:"requires_accounting_tax_review"`
	Status                      EmployeeAdvanceStatus         `json:"status"`
	Transactions                *[]EmployeeAdvanceTransaction `json:"transactions,omitempty"`
	WrittenOffAmount            TRYAmount                     `json:"written_off_amount"`
}

// EmployeeAdvanceCurrency defines model for EmployeeAdvance.Currency.
type EmployeeAdvanceCurrency string

// EmployeeAdvanceStatus defines model for EmployeeAdvance.Status.
type EmployeeAdvanceStatus string

// EmployeeAdvanceCreateInput defines model for EmployeeAdvanceCreateInput.
type EmployeeAdvanceCreateInput struct {
	AccountId             openapi_types.UUID  `json:"account_id"`
	Amount                TRYAmount           `json:"amount"`
	Description           string              `json:"description"`
	EmployeeId            openapi_types.UUID  `json:"employee_id"`
	ExpectedRepaymentDate *openapi_types.Date `json:"expected_repayment_date"`
	IdempotencyKey        string              `json:"idempotency_key"`
	OverrideReason        *string             `json:"override_reason,omitempty"`
	Reference             *string             `json:"reference,omitempty"`
}

// EmployeeAdvanceReasonInput defines model for EmployeeAdvanceReasonInput.
type EmployeeAdvanceReasonInput struct {
	IdempotencyKey  string             `json:"idempotency_key"`
	OverrideReason  *string            `json:"override_reason,omitempty"`
	Reason          string             `json:"reason"`
	TransactionDate openapi_types.Date `json:"transaction_date"`
}

// EmployeeAdvanceRepaymentInput defines model for EmployeeAdvanceRepaymentInput.
type EmployeeAdvanceRepaymentInput struct {
	AccountId       openapi_types.UUID `json:"account_id"`
	Amount          TRYAmount          `json:"amount"`
	Description     *string            `json:"description,omitempty"`
	IdempotencyKey  string             `json:"idempotency_key"`
	Reference       *string            `json:"reference,omitempty"`
	TransactionDate openapi_types.Date `json:"transaction_date"`
}

// EmployeeAdvanceTransaction defines model for EmployeeAdvanceTransaction.
type EmployeeAdvanceTransaction struct {
	AccountId         *openapi_types.UUID            `json:"account_id"`
	ActorUserId       openapi_types.UUID             `json:"actor_user_id"`
	AdvanceId         openapi_types.UUID             `json:"advance_id"`
	Amount            TRYAmount                      `json:"amount"`
	CreatedAt         time.Time                      `json:"created_at"`
	Description       *string                        `json:"description,omitempty"`
	FinanceMovementId *openapi_types.UUID            `json:"finance_movement_id"`
	Id                openapi_types.UUID             `json:"id"`
	Reason            *string                        `json:"reason,omitempty"`
	ReversalOfId      *openapi_types.UUID            `json:"reversal_of_id"`
	TransactionDate   openapi_types.Date             `json:"transaction_date"`
	Type              EmployeeAdvanceTransactionType `json:"type"`
}

// EmployeeAdvanceTransactionType defines model for EmployeeAdvanceTransaction.Type.
type EmployeeAdvanceTransactionType string

// ErrorResponse defines model for ErrorResponse.
type ErrorResponse struct {
	Code    string                 `json:"code"`
	Details map[string]interface{} `json:"details"`
	Message string                 `json:"message"`
	TraceId string                 `json:"trace_id"`
}

// ExchangeRate defines model for ExchangeRate.
type ExchangeRate struct {
	BaseCurrency string             `json:"base_currency"`
	CompanyId    openapi_types.UUID `json:"company_id"`
	CurrencyCode string             `json:"currency_code"`
	FetchedAt    time.Time          `json:"fetched_at"`
	RateDate     openapi_types.Date `json:"rate_date"`

	// RateToBase Exact base-10 decimal; never an IEEE-754 number.
	RateToBase Decimal            `json:"rate_to_base"`
	Source     ExchangeRateSource `json:"source"`
	SourceUrl  *string            `json:"source_url,omitempty"`
}

// ExchangeRateSource defines model for ExchangeRate.Source.
type ExchangeRateSource string

// ExchangeRateDashboard defines model for ExchangeRateDashboard.
type ExchangeRateDashboard struct {
	BaseCurrency string               `json:"base_currency"`
	Items        []ExchangeRate       `json:"items"`
	Settings     ExchangeRateSettings `json:"settings"`
}

// ExchangeRateSettings defines model for ExchangeRateSettings.
type ExchangeRateSettings struct {
	CompanyId            openapi_types.UUID                   `json:"company_id"`
	LastAttemptAt        *time.Time                           `json:"last_attempt_at"`
	LastError            *string                              `json:"last_error,omitempty"`
	LastRateDate         *openapi_types.Date                  `json:"last_rate_date"`
	LastSource           *string                              `json:"last_source"`
	LastSuccessAt        *time.Time                           `json:"last_success_at"`
	RefreshIntervalHours int                                  `json:"refresh_interval_hours"`
	SourcePreference     ExchangeRateSettingsSourcePreference `json:"source_preference"`
	Version              int64                                `json:"version"`
}

// ExchangeRateSettingsSourcePreference defines model for ExchangeRateSettings.SourcePreference.
type ExchangeRateSettingsSourcePreference string

// ExchangeRateSettingsInput defines model for ExchangeRateSettingsInput.
type ExchangeRateSettingsInput struct {
	RefreshIntervalHours *int                                       `json:"refresh_interval_hours,omitempty"`
	SourcePreference     *ExchangeRateSettingsInputSourcePreference `json:"source_preference,omitempty"`
}

// ExchangeRateSettingsInputSourcePreference defines model for ExchangeRateSettingsInput.SourcePreference.
type ExchangeRateSettingsInputSourcePreference string

// ExportJob defines model for ExportJob.
type ExportJob struct {
	EntityType ImportEntityType   `json:"entity_type"`
	Filename   *string            `json:"filename,omitempty"`
	Format     ExportJobFormat    `json:"format"`
	Id         openapi_types.UUID `json:"id"`
	RowCount   int                `json:"row_count"`
	Status     ExportJobStatus    `json:"status"`
}

// ExportJobFormat defines model for ExportJob.Format.
type ExportJobFormat string

// ExportJobStatus defines model for ExportJob.Status.
type ExportJobStatus string

// FinanceAccount defines model for FinanceAccount.
type FinanceAccount struct {
	AccountNumber  *string                   `json:"account_number,omitempty"`
	AccountType    FinanceAccountAccountType `json:"account_type"`
	BankBranchCode *string                   `json:"bank_branch_code,omitempty"`
	BankBranchName *string                   `json:"bank_branch_name,omitempty"`
	BankName       *string                   `json:"bank_name,omitempty"`
	BranchId       *openapi_types.UUID       `json:"branch_id"`
	Code           string                    `json:"code"`
	Currency       string                    `json:"currency"`
	Description    *string                   `json:"description,omitempty"`

	// Iban Masked in read responses
	Iban     *string             `json:"iban,omitempty"`
	Id       *openapi_types.UUID `json:"id,omitempty"`
	IsActive *bool               `json:"is_active,omitempty"`
	Name     string              `json:"name"`
	Notes    *string             `json:"notes,omitempty"`
	Version  *int64              `json:"version,omitempty"`
}

// FinanceAccountAccountType defines model for FinanceAccount.AccountType.
type FinanceAccountAccountType string

// FinanceAccountBalance defines model for FinanceAccountBalance.
type FinanceAccountBalance struct {
	AccountId openapi_types.UUID `json:"account_id"`

	// Balance Exact base-10 decimal; never an IEEE-754 number.
	Balance  Decimal `json:"balance"`
	Currency string  `json:"currency"`
}

// FinanceAccountMovement defines model for FinanceAccountMovement.
type FinanceAccountMovement = FinanceAccountMovementRequest

// FinanceAccountMovementRequest defines model for FinanceAccountMovementRequest.
type FinanceAccountMovementRequest struct {
	AccountId openapi_types.UUID `json:"account_id"`

	// Amount Exact base-10 decimal; never an IEEE-754 number.
	Amount            Decimal                                `json:"amount"`
	Description       *string                                `json:"description,omitempty"`
	Direction         FinanceAccountMovementRequestDirection `json:"direction"`
	ExternalReference *string                                `json:"external_reference,omitempty"`
	OverrideReason    *string                                `json:"override_reason,omitempty"`
	TransactionDate   openapi_types.Date                     `json:"transaction_date"`
}

// FinanceAccountMovementRequestDirection defines model for FinanceAccountMovementRequest.Direction.
type FinanceAccountMovementRequestDirection string

// FinanceAccountStatement defines model for FinanceAccountStatement.
type FinanceAccountStatement struct {
	AccountId openapi_types.UUID `json:"account_id"`

	// ClosingBalance Exact base-10 decimal; never an IEEE-754 number.
	ClosingBalance Decimal                  `json:"closing_balance"`
	Currency       string                   `json:"currency"`
	Items          []FinanceAccountMovement `json:"items"`

	// OpeningBalance Exact base-10 decimal; never an IEEE-754 number.
	OpeningBalance Decimal `json:"opening_balance"`
}

// FinanceTransfer defines model for FinanceTransfer.
type FinanceTransfer = FinanceTransferRequest

// FinanceTransferRequest defines model for FinanceTransferRequest.
type FinanceTransferRequest struct {
	// Amount Exact base-10 decimal; never an IEEE-754 number.
	Amount            Decimal            `json:"amount"`
	Description       string             `json:"description"`
	ExternalReference *string            `json:"external_reference,omitempty"`
	FromAccountId     openapi_types.UUID `json:"from_account_id"`
	OverrideReason    *string            `json:"override_reason,omitempty"`
	ToAccountId       openapi_types.UUID `json:"to_account_id"`
	TransactionDate   openapi_types.Date `json:"transaction_date"`
}

// GlobalSearchItem defines model for GlobalSearchItem.
type GlobalSearchItem struct {
	Detail string               `json:"detail"`
	Href   string               `json:"href"`
	Title  string               `json:"title"`
	Type   GlobalSearchItemType `json:"type"`
}

// GlobalSearchItemType defines model for GlobalSearchItem.Type.
type GlobalSearchItemType string

// GlobalSearchResponse defines model for GlobalSearchResponse.
type GlobalSearchResponse struct {
	Items []GlobalSearchItem `json:"items"`
}

// GoodsReceipt defines model for GoodsReceipt.
type GoodsReceipt = GoodsReceiptInput

// GoodsReceiptInput defines model for GoodsReceiptInput.
type GoodsReceiptInput struct {
	BranchId openapi_types.UUID `json:"branch_id"`
	Currency *string            `json:"currency,omitempty"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate *Decimal `json:"exchange_rate,omitempty"`
	Lines        []struct {
		// AcceptedQuantity Exact base-10 decimal; never an IEEE-754 number.
		AcceptedQuantity Decimal `json:"accepted_quantity"`

		// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
		BaseQuantity *Decimal `json:"base_quantity,omitempty"`

		// ConversionFactor Exact base-10 decimal; never an IEEE-754 number.
		ConversionFactor *Decimal `json:"conversion_factor,omitempty"`
		Currency         string   `json:"currency"`

		// DamagedQuantity Exact base-10 decimal; never an IEEE-754 number.
		DamagedQuantity     Decimal                   `json:"damaged_quantity"`
		Id                  *openapi_types.UUID       `json:"id,omitempty"`
		LineNo              *int                      `json:"line_no,omitempty"`
		LotSnapshot         *[]map[string]interface{} `json:"lot_snapshot,omitempty"`
		ProductId           openapi_types.UUID        `json:"product_id"`
		PurchaseOrderLineId *openapi_types.UUID       `json:"purchase_order_line_id"`

		// RejectedQuantity Exact base-10 decimal; never an IEEE-754 number.
		RejectedQuantity Decimal `json:"rejected_quantity"`

		// RemainingInvoicingBaseQuantity Exact base-10 decimal; never an IEEE-754 number.
		RemainingInvoicingBaseQuantity *Decimal `json:"remaining_invoicing_base_quantity,omitempty"`

		// RemainingInvoicingQuantity Exact base-10 decimal; never an IEEE-754 number.
		RemainingInvoicingQuantity *Decimal `json:"remaining_invoicing_quantity,omitempty"`

		// RemainingReturnBaseQuantity Exact base-10 decimal; never an IEEE-754 number.
		RemainingReturnBaseQuantity *Decimal `json:"remaining_return_base_quantity,omitempty"`

		// RemainingReturnQuantity Exact base-10 decimal; never an IEEE-754 number.
		RemainingReturnQuantity *Decimal                  `json:"remaining_return_quantity,omitempty"`
		SerialSnapshot          *[]map[string]interface{} `json:"serial_snapshot,omitempty"`
		TaxSnapshot             *map[string]interface{}   `json:"tax_snapshot,omitempty"`
		UnitCode                string                    `json:"unit_code"`

		// UnitCost Exact base-10 decimal; never an IEEE-754 number.
		UnitCost  Decimal             `json:"unit_cost"`
		VariantId *openapi_types.UUID `json:"variant_id"`
	} `json:"lines"`
	Notes           *string             `json:"notes,omitempty"`
	PurchaseOrderId *openapi_types.UUID `json:"purchase_order_id,omitempty"`
	ReceiptDate     *time.Time          `json:"receipt_date,omitempty"`
	ReceiptNo       *string             `json:"receipt_no,omitempty"`
	SupplierId      openapi_types.UUID  `json:"supplier_id"`
	WarehouseId     openapi_types.UUID  `json:"warehouse_id"`
}

// HealthResponse defines model for HealthResponse.
type HealthResponse struct {
	Release string                `json:"release"`
	Service HealthResponseService `json:"service"`
	Status  HealthResponseStatus  `json:"status"`
}

// HealthResponseService defines model for HealthResponse.Service.
type HealthResponseService string

// HealthResponseStatus defines model for HealthResponse.Status.
type HealthResponseStatus string

// ImportAnalysis defines model for ImportAnalysis.
type ImportAnalysis struct {
	Job     ImportJob              `json:"job"`
	Mapping map[string]interface{} `json:"mapping"`
	Preview struct {
		CanCommit   bool                     `json:"can_commit"`
		InvalidRows int                      `json:"invalid_rows"`
		Rows        []map[string]interface{} `json:"rows"`
		TotalRows   int                      `json:"total_rows"`
		ValidRows   int                      `json:"valid_rows"`
		WarningRows int                      `json:"warning_rows"`
	} `json:"preview"`
}

// ImportEntityType defines model for ImportEntityType.
type ImportEntityType string

// ImportJob defines model for ImportJob.
type ImportJob struct {
	CommitMode     ImportJobCommitMode `json:"commit_mode"`
	CompanyId      openapi_types.UUID  `json:"company_id"`
	CreatedAt      *time.Time          `json:"created_at,omitempty"`
	Direction      ImportJobDirection  `json:"direction"`
	DryRun         *bool               `json:"dry_run,omitempty"`
	EntityType     ImportEntityType    `json:"entity_type"`
	ErrorCount     int                 `json:"error_count"`
	Id             openapi_types.UUID  `json:"id"`
	RowCount       int                 `json:"row_count"`
	SourceFilename *string             `json:"source_filename,omitempty"`
	Status         ImportJobStatus     `json:"status"`
	TargetId       *openapi_types.UUID `json:"target_id"`
	UpdatedAt      *time.Time          `json:"updated_at,omitempty"`
	WarningCount   int                 `json:"warning_count"`
}

// ImportJobCommitMode defines model for ImportJob.CommitMode.
type ImportJobCommitMode string

// ImportJobDirection defines model for ImportJob.Direction.
type ImportJobDirection string

// ImportJobStatus defines model for ImportJob.Status.
type ImportJobStatus string

// Invoice defines model for Invoice.
type Invoice = InvoiceRequest

// InvoiceRequest defines model for InvoiceRequest.
type InvoiceRequest struct {
	BranchId         openapi_types.UUID             `json:"branch_id"`
	CurrencyCode     string                         `json:"currency_code"`
	DocumentDate     openapi_types.Date             `json:"document_date"`
	DocumentTypeCode InvoiceRequestDocumentTypeCode `json:"document_type_code"`
	DueDate          *openapi_types.Date            `json:"due_date"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate *Decimal                 `json:"exchange_rate,omitempty"`
	Lines        []map[string]interface{} `json:"lines"`
	PartyId      openapi_types.UUID       `json:"party_id"`
	WarehouseId  *openapi_types.UUID      `json:"warehouse_id"`
}

// InvoiceRequestDocumentTypeCode defines model for InvoiceRequest.DocumentTypeCode.
type InvoiceRequestDocumentTypeCode string

// LoginRequest defines model for LoginRequest.
type LoginRequest struct {
	Email    openapi_types.Email `json:"email"`
	Password string              `json:"password"`

	// TotpCode Six-digit TOTP or a one-time recovery code
	TotpCode *string `json:"totp_code,omitempty"`
}

// OpenItem defines model for OpenItem.
type OpenItem struct {
	// AllocatedAmount Exact base-10 decimal; never an IEEE-754 number.
	AllocatedAmount Decimal             `json:"allocated_amount"`
	BaseCurrency    *string             `json:"base_currency,omitempty"`
	Currency        string              `json:"currency"`
	DocumentDate    openapi_types.Date  `json:"document_date"`
	DocumentId      openapi_types.UUID  `json:"document_id"`
	DocumentNo      *string             `json:"document_no,omitempty"`
	DueDate         *openapi_types.Date `json:"due_date"`

	// DueSchedule Remaining dated portions of a planned invoice; invoice balance and identity are unchanged.
	DueSchedule *[]struct {
		DueDate       *time.Time `json:"due_date,omitempty"`
		InstallmentNo int        `json:"installment_no"`

		// OpenAmount Exact base-10 decimal; never an IEEE-754 number.
		OpenAmount Decimal             `json:"open_amount"`
		PlanId     *openapi_types.UUID `json:"plan_id,omitempty"`
	} `json:"due_schedule,omitempty"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate *Decimal           `json:"exchange_rate,omitempty"`
	Id           openapi_types.UUID `json:"id"`

	// OpenAmount Exact base-10 decimal; never an IEEE-754 number.
	OpenAmount Decimal `json:"open_amount"`

	// OriginalAmount Exact base-10 decimal; never an IEEE-754 number.
	OriginalAmount Decimal            `json:"original_amount"`
	PartyId        openapi_types.UUID `json:"party_id"`
	Side           OpenItemSide       `json:"side"`
}

// OpenItemSide defines model for OpenItem.Side.
type OpenItemSide string

// OpenItemPage defines model for OpenItemPage.
type OpenItemPage struct {
	Items      []OpenItem `json:"items"`
	NextCursor *string    `json:"next_cursor,omitempty"`
}

// PagedItems defines model for PagedItems.
type PagedItems struct {
	Items      []map[string]interface{} `json:"items"`
	NextCursor *string                  `json:"next_cursor,omitempty"`
}

// Party defines model for Party.
type Party struct {
	// AddressSummary Default address summary for list presentation
	AddressSummary *string         `json:"address_summary,omitempty"`
	Addresses      *[]PartyAddress `json:"addresses,omitempty"`

	// Balance Exact base-10 decimal; never an IEEE-754 number.
	Balance *Decimal `json:"balance,omitempty"`

	// BalanceCurrency Party-card balance unit; always the company's locked base currency
	BalanceCurrency *string `json:"balance_currency,omitempty"`

	// City Default address city for list presentation
	City *string `json:"city,omitempty"`
	Code string  `json:"code"`

	// ContactSummary All contact channels in compact list form
	ContactSummary *string                   `json:"contact_summary,omitempty"`
	Contacts       *[]map[string]interface{} `json:"contacts,omitempty"`

	// CreditLimit Exact base-10 decimal; never an IEEE-754 number.
	CreditLimit *Decimal `json:"credit_limit,omitempty"`

	// CustomFieldSummary Custom-field names and values in compact list form
	CustomFieldSummary *string `json:"custom_field_summary,omitempty"`

	// CustomFields Values keyed by stable custom-field code; NUMBER values are decimal strings.
	CustomFields    *map[string]interface{} `json:"custom_fields,omitempty"`
	DefaultCurrency string                  `json:"default_currency"`

	// DefaultDiscountRate Exact base-10 decimal; never an IEEE-754 number.
	DefaultDiscountRate *Decimal `json:"default_discount_rate,omitempty"`
	DisplayName         string   `json:"display_name"`

	// Email Primary contact e-mail for list presentation
	Email     *string               `json:"email,omitempty"`
	FirstName *string               `json:"first_name,omitempty"`
	GroupIds  *[]openapi_types.UUID `json:"group_ids,omitempty"`

	// GroupSummary Company-scoped cari group names
	GroupSummary   *string            `json:"group_summary,omitempty"`
	Id             openapi_types.UUID `json:"id"`
	IdentityNumber *string            `json:"identity_number,omitempty"`
	IsActive       bool               `json:"is_active"`
	IsCustomer     bool               `json:"is_customer"`
	IsSupplier     bool               `json:"is_supplier"`

	// Kind Immutable after creation
	Kind          PartyKind           `json:"kind"`
	LastName      *string             `json:"last_name,omitempty"`
	LegalName     *string             `json:"legal_name,omitempty"`
	PaymentTermId *openapi_types.UUID `json:"payment_term_id,omitempty"`

	// PaymentTermName Payment-term display name
	PaymentTermName *string `json:"payment_term_name,omitempty"`

	// Phone Primary contact phone for list presentation
	Phone       *string             `json:"phone,omitempty"`
	PriceListId *openapi_types.UUID `json:"price_list_id,omitempty"`

	// RiskLimit Exact base-10 decimal; never an IEEE-754 number.
	RiskLimit  *Decimal         `json:"risk_limit,omitempty"`
	RiskPolicy *PartyRiskPolicy `json:"risk_policy,omitempty"`

	// SalesRepName Sales representative display name
	SalesRepName   *string             `json:"sales_rep_name,omitempty"`
	SalesRepUserId *openapi_types.UUID `json:"sales_rep_user_id,omitempty"`

	// TagSummary Company-scoped tag names
	TagSummary *string   `json:"tag_summary,omitempty"`
	Tags       *[]string `json:"tags,omitempty"`
	TaxNumber  *string   `json:"tax_number,omitempty"`
	TaxOffice  *string   `json:"tax_office,omitempty"`

	// TaxOfficeId Optional selected row from the global GİB tax-office catalog
	TaxOfficeId *openapi_types.UUID `json:"tax_office_id"`
	TradeName   *string             `json:"trade_name,omitempty"`
	Version     int64               `json:"version"`
	Warnings    *[]string           `json:"warnings,omitempty"`
}

// PartyKind Immutable after creation
type PartyKind string

// PartyRiskPolicy defines model for Party.RiskPolicy.
type PartyRiskPolicy string

// PartyAddress defines model for PartyAddress.
type PartyAddress struct {
	// AddressLine Optional free-form address text; province_id is required when any address information is supplied.
	AddressLine *string `json:"address_line,omitempty"`

	// City Legacy alias for the canonical province name
	City *string `json:"city,omitempty"`

	// District Legacy alias for the canonical district name
	District *string `json:"district,omitempty"`

	// DistrictId Must belong to province_id
	DistrictId   *int64              `json:"district_id"`
	DistrictName *string             `json:"district_name,omitempty"`
	Id           *openapi_types.UUID `json:"id,omitempty"`
	IsDefault    bool                `json:"is_default"`

	// Neighborhood Legacy alias for the canonical neighbourhood name
	Neighborhood *string `json:"neighborhood,omitempty"`

	// NeighborhoodId Must belong to district_id
	NeighborhoodId   *int64  `json:"neighborhood_id"`
	NeighborhoodName *string `json:"neighborhood_name,omitempty"`

	// ProvinceId Turkey province reference ID
	ProvinceId   *int64  `json:"province_id"`
	ProvinceName *string `json:"province_name,omitempty"`
}

// PartyAgingReport defines model for PartyAgingReport.
type PartyAgingReport struct {
	AsOf  openapi_types.Date `json:"as_of"`
	Items []PartyAgingRow    `json:"items"`
}

// PartyAgingRow defines model for PartyAgingRow.
type PartyAgingRow struct {
	Currency string `json:"currency"`

	// Days030 Exact base-10 decimal; never an IEEE-754 number.
	Days030 Decimal `json:"days_0_30"`

	// Days3160 Exact base-10 decimal; never an IEEE-754 number.
	Days3160 Decimal `json:"days_31_60"`

	// Days6190 Exact base-10 decimal; never an IEEE-754 number.
	Days6190 Decimal `json:"days_61_90"`

	// Days90Plus Exact base-10 decimal; never an IEEE-754 number.
	Days90Plus Decimal `json:"days_90_plus"`

	// NotDue Exact base-10 decimal; never an IEEE-754 number.
	NotDue Decimal `json:"not_due"`

	// OverdueTotal Exact base-10 decimal; never an IEEE-754 number.
	OverdueTotal Decimal            `json:"overdue_total"`
	PartyCode    string             `json:"party_code"`
	PartyId      openapi_types.UUID `json:"party_id"`
	PartyName    string             `json:"party_name"`
	Side         PartyAgingRowSide  `json:"side"`

	// Total Exact base-10 decimal; never an IEEE-754 number.
	Total Decimal `json:"total"`
}

// PartyAgingRowSide defines model for PartyAgingRow.Side.
type PartyAgingRowSide string

// PartyBalance defines model for PartyBalance.
type PartyBalance struct {
	// Balance Exact base-10 decimal; never an IEEE-754 number.
	Balance Decimal `json:"balance"`

	// BaseBalance Exact base-10 decimal; never an IEEE-754 number.
	BaseBalance  Decimal `json:"base_balance"`
	BaseCurrency string  `json:"base_currency"`

	// Credit Exact base-10 decimal; never an IEEE-754 number.
	Credit   Decimal `json:"credit"`
	Currency string  `json:"currency"`

	// Debit Exact base-10 decimal; never an IEEE-754 number.
	Debit Decimal `json:"debit"`
}

// PartyBalanceResponse defines model for PartyBalanceResponse.
type PartyBalanceResponse struct {
	// BaseBalance Exact base-10 decimal; never an IEEE-754 number.
	BaseBalance  Decimal        `json:"base_balance"`
	BaseCurrency string         `json:"base_currency"`
	Items        []PartyBalance `json:"items"`
}

// PartyCustomField defines model for PartyCustomField.
type PartyCustomField struct {
	Code          string                    `json:"code"`
	FieldType     PartyCustomFieldFieldType `json:"field_type"`
	Id            *openapi_types.UUID       `json:"id,omitempty"`
	IsActive      *bool                     `json:"is_active,omitempty"`
	IsRequired    *bool                     `json:"is_required,omitempty"`
	Name          string                    `json:"name"`
	SelectOptions *[]string                 `json:"select_options,omitempty"`
}

// PartyCustomFieldFieldType defines model for PartyCustomField.FieldType.
type PartyCustomFieldFieldType string

// PartyGroup defines model for PartyGroup.
type PartyGroup struct {
	Code     string              `json:"code"`
	Id       *openapi_types.UUID `json:"id,omitempty"`
	IsActive *bool               `json:"is_active,omitempty"`
	Name     string              `json:"name"`
	Version  *int64              `json:"version,omitempty"`
}

// PartyInput defines model for PartyInput.
type PartyInput struct {
	Addresses *[]PartyAddress `json:"addresses,omitempty"`

	// Code Empty on create requests an atomic company sequence number; immutable after creation
	Code     *string                   `json:"code,omitempty"`
	Contacts *[]map[string]interface{} `json:"contacts,omitempty"`

	// CreditLimit Exact base-10 decimal; never an IEEE-754 number.
	CreditLimit *Decimal `json:"credit_limit,omitempty"`

	// CustomFields Values keyed by stable custom-field code; NUMBER values are decimal strings.
	CustomFields    *map[string]interface{} `json:"custom_fields,omitempty"`
	DefaultCurrency string                  `json:"default_currency"`

	// DefaultDiscountRate Exact base-10 decimal; never an IEEE-754 number.
	DefaultDiscountRate *Decimal              `json:"default_discount_rate,omitempty"`
	DisplayName         string                `json:"display_name"`
	FirstName           *string               `json:"first_name,omitempty"`
	GroupIds            *[]openapi_types.UUID `json:"group_ids,omitempty"`
	IdentityNumber      *string               `json:"identity_number,omitempty"`
	IsCustomer          bool                  `json:"is_customer"`
	IsSupplier          bool                  `json:"is_supplier"`

	// Kind Immutable after creation
	Kind          PartyInputKind      `json:"kind"`
	LastName      *string             `json:"last_name,omitempty"`
	LegalName     *string             `json:"legal_name,omitempty"`
	PaymentTermId *openapi_types.UUID `json:"payment_term_id,omitempty"`
	PriceListId   *openapi_types.UUID `json:"price_list_id,omitempty"`

	// RiskLimit Exact base-10 decimal; never an IEEE-754 number.
	RiskLimit      *Decimal              `json:"risk_limit,omitempty"`
	RiskPolicy     *PartyInputRiskPolicy `json:"risk_policy,omitempty"`
	SalesRepUserId *openapi_types.UUID   `json:"sales_rep_user_id,omitempty"`
	Tags           *[]string             `json:"tags,omitempty"`
	TaxNumber      *string               `json:"tax_number,omitempty"`
	TaxOffice      *string               `json:"tax_office,omitempty"`

	// TaxOfficeId Optional selected row from the global GİB tax-office catalog
	TaxOfficeId *openapi_types.UUID `json:"tax_office_id"`
	TradeName   *string             `json:"trade_name,omitempty"`
}

// PartyInputKind Immutable after creation
type PartyInputKind string

// PartyInputRiskPolicy defines model for PartyInput.RiskPolicy.
type PartyInputRiskPolicy string

// PartyLedgerEntry defines model for PartyLedgerEntry.
type PartyLedgerEntry struct {
	ActorName    *string             `json:"actor_name,omitempty"`
	ActorUserId  *openapi_types.UUID `json:"actor_user_id"`
	BaseAmount   *Decimal            `json:"base_amount"`
	BaseCurrency *string             `json:"base_currency"`

	// Credit Exact base-10 decimal; never an IEEE-754 number.
	Credit   Decimal `json:"credit"`
	Currency string  `json:"currency"`

	// Debit Exact base-10 decimal; never an IEEE-754 number.
	Debit        Decimal             `json:"debit"`
	Description  string              `json:"description"`
	DocumentDate openapi_types.Date  `json:"document_date"`
	DocumentNo   *string             `json:"document_no,omitempty"`
	DueDate      *openapi_types.Date `json:"due_date"`
	EntryType    string              `json:"entry_type"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate Decimal             `json:"exchange_rate"`
	Id           openapi_types.UUID  `json:"id"`
	PartyCode    *string             `json:"party_code,omitempty"`
	PartyId      openapi_types.UUID  `json:"party_id"`
	PartyName    *string             `json:"party_name,omitempty"`
	PostedAt     time.Time           `json:"posted_at"`
	ReferenceNo  *string             `json:"reference_no,omitempty"`
	ReversalOfId *openapi_types.UUID `json:"reversal_of_id"`

	// RunningBalance Exact base-10 decimal; never an IEEE-754 number.
	RunningBalance *Decimal                `json:"running_balance,omitempty"`
	Snapshot       *map[string]interface{} `json:"snapshot,omitempty"`
	SourceId       openapi_types.UUID      `json:"source_id"`
	SourceType     string                  `json:"source_type"`
	Status         *string                 `json:"status,omitempty"`
}

// PartyLedgerPage defines model for PartyLedgerPage.
type PartyLedgerPage struct {
	Items      []PartyLedgerEntry `json:"items"`
	NextCursor *string            `json:"next_cursor,omitempty"`
}

// PartyList defines model for PartyList.
type PartyList struct {
	Items      []Party `json:"items"`
	NextCursor *string `json:"next_cursor,omitempty"`
}

// PartyMovement defines model for PartyMovement.
type PartyMovement = PartyMovementRequest

// PartyMovementRequest defines model for PartyMovementRequest.
type PartyMovementRequest struct {
	// BaseAmount Exact base-10 decimal; never an IEEE-754 number.
	BaseAmount   *Decimal `json:"base_amount,omitempty"`
	BaseCurrency *string  `json:"base_currency"`

	// Credit Exact base-10 decimal; never an IEEE-754 number.
	Credit   *Decimal `json:"credit,omitempty"`
	Currency string   `json:"currency"`

	// Debit Exact base-10 decimal; never an IEEE-754 number.
	Debit        *Decimal            `json:"debit,omitempty"`
	Description  string              `json:"description"`
	DocumentDate openapi_types.Date  `json:"document_date"`
	DueDate      *openapi_types.Date `json:"due_date"`
	EntryType    string              `json:"entry_type"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate   *Decimal            `json:"exchange_rate,omitempty"`
	IdempotencyKey string              `json:"idempotency_key"`
	PartyId        openapi_types.UUID  `json:"party_id"`
	ReferenceNo    *string             `json:"reference_no,omitempty"`
	ReversalOfId   *openapi_types.UUID `json:"reversal_of_id"`
	SourceId       openapi_types.UUID  `json:"source_id"`
	SourceType     string              `json:"source_type"`
}

// PartyStatementReport defines model for PartyStatementReport.
type PartyStatementReport struct {
	// ClosingBalance Exact base-10 decimal; never an IEEE-754 number.
	ClosingBalance Decimal            `json:"closing_balance"`
	Currency       string             `json:"currency"`
	Items          []PartyLedgerEntry `json:"items"`
	NextCursor     *string            `json:"next_cursor,omitempty"`

	// OpeningBalance Exact base-10 decimal; never an IEEE-754 number.
	OpeningBalance Decimal `json:"opening_balance"`

	// TotalCredit Exact base-10 decimal; never an IEEE-754 number.
	TotalCredit Decimal `json:"total_credit"`

	// TotalDebit Exact base-10 decimal; never an IEEE-754 number.
	TotalDebit Decimal `json:"total_debit"`
}

// PartyTransfer defines model for PartyTransfer.
type PartyTransfer struct {
	// Amount Exact base-10 decimal; never an IEEE-754 number.
	Amount              Decimal            `json:"amount"`
	CreditLedgerEntryId openapi_types.UUID `json:"credit_ledger_entry_id"`
	Currency            string             `json:"currency"`
	DebitLedgerEntryId  openapi_types.UUID `json:"debit_ledger_entry_id"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate *Decimal           `json:"exchange_rate,omitempty"`
	FromPartyId  openapi_types.UUID `json:"from_party_id"`
	Id           openapi_types.UUID `json:"id"`
	ToPartyId    openapi_types.UUID `json:"to_party_id"`
}

// Payment defines model for Payment.
type Payment = PaymentRequest

// PaymentPlan defines model for PaymentPlan.
type PaymentPlan struct {
	CancelReason *string            `json:"cancel_reason,omitempty"`
	CancelledAt  *time.Time         `json:"cancelled_at,omitempty"`
	CreatedAt    time.Time          `json:"created_at"`
	Currency     string             `json:"currency"`
	Description  string             `json:"description"`
	Id           openapi_types.UUID `json:"id"`
	Installments []struct {
		Allocations *[]struct {
			// Amount Exact base-10 decimal; never an IEEE-754 number.
			Amount     *Decimal            `json:"amount,omitempty"`
			OpenItemId *openapi_types.UUID `json:"open_item_id,omitempty"`
		} `json:"allocations,omitempty"`

		// Amount Exact base-10 decimal; never an IEEE-754 number.
		Amount *Decimal `json:"amount,omitempty"`

		// ClosedAmount Exact base-10 decimal; never an IEEE-754 number.
		ClosedAmount *Decimal            `json:"closed_amount,omitempty"`
		DueDate      *openapi_types.Date `json:"due_date,omitempty"`
		Number       *int                `json:"number,omitempty"`

		// OpenAmount Exact base-10 decimal; never an IEEE-754 number.
		OpenAmount *Decimal                       `json:"open_amount,omitempty"`
		Status     *PaymentPlanInstallmentsStatus `json:"status,omitempty"`
	} `json:"installments"`
	PartyId   openapi_types.UUID `json:"party_id"`
	PartyName *string            `json:"party_name,omitempty"`
	Side      PaymentPlanSide    `json:"side"`
	Sources   []struct {
		// Amount Exact base-10 decimal; never an IEEE-754 number.
		Amount     *Decimal            `json:"amount,omitempty"`
		DocumentId *openapi_types.UUID `json:"document_id,omitempty"`
		DocumentNo *string             `json:"document_no,omitempty"`
		OpenItemId *openapi_types.UUID `json:"open_item_id,omitempty"`
	} `json:"sources"`

	// TotalAmount Exact base-10 decimal; never an IEEE-754 number.
	TotalAmount Decimal `json:"total_amount"`
	Version     int64   `json:"version"`
}

// PaymentPlanInstallmentsStatus defines model for PaymentPlan.Installments.Status.
type PaymentPlanInstallmentsStatus string

// PaymentPlanSide defines model for PaymentPlan.Side.
type PaymentPlanSide string

// PaymentPlanInput defines model for PaymentPlanInput.
type PaymentPlanInput struct {
	Currency     string `json:"currency"`
	Description  string `json:"description"`
	Installments []struct {
		// Amount Exact base-10 decimal; never an IEEE-754 number.
		Amount  Decimal            `json:"amount"`
		DueDate openapi_types.Date `json:"due_date"`
	} `json:"installments"`
	OpenItemIds []openapi_types.UUID `json:"open_item_ids"`
	PartyId     openapi_types.UUID   `json:"party_id"`
	Side        PaymentPlanInputSide `json:"side"`
}

// PaymentPlanInputSide defines model for PaymentPlanInput.Side.
type PaymentPlanInputSide string

// PaymentPlanSummary defines model for PaymentPlanSummary.
type PaymentPlanSummary struct {
	CreatedAt     *time.Time                `json:"created_at,omitempty"`
	Currency      *string                   `json:"currency,omitempty"`
	Description   *string                   `json:"description,omitempty"`
	Id            *openapi_types.UUID       `json:"id,omitempty"`
	NextDueDate   *openapi_types.Date       `json:"next_due_date,omitempty"`
	OpenAmount    *string                   `json:"open_amount,omitempty"`
	OverdueAmount *string                   `json:"overdue_amount,omitempty"`
	PartyId       *openapi_types.UUID       `json:"party_id,omitempty"`
	PartyName     *string                   `json:"party_name,omitempty"`
	Status        *PaymentPlanSummaryStatus `json:"status,omitempty"`
	TotalAmount   *string                   `json:"total_amount,omitempty"`
}

// PaymentPlanSummaryStatus defines model for PaymentPlanSummary.Status.
type PaymentPlanSummaryStatus string

// PaymentRequest defines model for PaymentRequest.
type PaymentRequest struct {
	// AccountId Required for CASH
	AccountId   *openapi_types.UUID       `json:"account_id"`
	Allocations *[]map[string]interface{} `json:"allocations,omitempty"`

	// Amount Exact base-10 decimal; never an IEEE-754 number.
	Amount      Decimal `json:"amount"`
	Currency    string  `json:"currency"`
	Description string  `json:"description"`

	// InstallmentNo En eski açık taksit; allocations bu taksitin kaynak fatura paylarını aşamaz
	InstallmentNo  *int                        `json:"installment_no,omitempty"`
	OverrideReason *string                     `json:"override_reason,omitempty"`
	PartyId        openapi_types.UUID          `json:"party_id"`
	PaymentKind    PaymentRequestPaymentKind   `json:"payment_kind"`
	PaymentMethod  PaymentRequestPaymentMethod `json:"payment_method"`

	// PaymentPlanId Taksitten yapılan ödeme için kaynak plan
	PaymentPlanId   *openapi_types.UUID `json:"payment_plan_id,omitempty"`
	TransactionDate openapi_types.Date  `json:"transaction_date"`
}

// PaymentRequestPaymentKind defines model for PaymentRequest.PaymentKind.
type PaymentRequestPaymentKind string

// PaymentRequestPaymentMethod defines model for PaymentRequest.PaymentMethod.
type PaymentRequestPaymentMethod string

// PaymentTerm defines model for PaymentTerm.
type PaymentTerm struct {
	Code     string              `json:"code"`
	DueDays  int                 `json:"due_days"`
	Id       *openapi_types.UUID `json:"id,omitempty"`
	IsActive *bool               `json:"is_active,omitempty"`
	Name     string              `json:"name"`
	Version  *int64              `json:"version,omitempty"`
}

// PriceEntry defines model for PriceEntry.
type PriceEntry struct {
	Id          *openapi_types.UUID `json:"id,omitempty"`
	ItemId      openapi_types.UUID  `json:"item_id"`
	PriceListId *openapi_types.UUID `json:"price_list_id,omitempty"`

	// UnitPrice Exact base-10 decimal; never an IEEE-754 number.
	UnitPrice Decimal             `json:"unit_price"`
	ValidFrom openapi_types.Date  `json:"valid_from"`
	ValidTo   *openapi_types.Date `json:"valid_to"`
	Version   *int64              `json:"version,omitempty"`
}

// PriceList defines model for PriceList.
type PriceList struct {
	Code         string                `json:"code"`
	CurrencyCode string                `json:"currency_code"`
	Id           *openapi_types.UUID   `json:"id,omitempty"`
	IsActive     *bool                 `json:"is_active,omitempty"`
	Name         string                `json:"name"`
	RoundPolicy  *PriceListRoundPolicy `json:"round_policy,omitempty"`
	RoundScale   *int                  `json:"round_scale,omitempty"`
	TaxMode      *PriceListTaxMode     `json:"tax_mode,omitempty"`
	Version      *int64                `json:"version,omitempty"`
}

// PriceListRoundPolicy defines model for PriceList.RoundPolicy.
type PriceListRoundPolicy string

// PriceListTaxMode defines model for PriceList.TaxMode.
type PriceListTaxMode string

// Product defines model for Product.
type Product struct {
	AutoCode       *bool                     `json:"auto_code,omitempty"`
	BarcodeSummary *string                   `json:"barcode_summary,omitempty"`
	Barcodes       *[]map[string]interface{} `json:"barcodes,omitempty"`
	BaseUnit       string                    `json:"base_unit"`
	BrandId        *openapi_types.UUID       `json:"brand_id,omitempty"`
	BrandName      *string                   `json:"brand_name,omitempty"`
	CategoryId     *openapi_types.UUID       `json:"category_id,omitempty"`
	CategoryName   *string                   `json:"category_name,omitempty"`
	Code           string                    `json:"code"`
	CreatedAt      *time.Time                `json:"created_at,omitempty"`
	Description    *string                   `json:"description,omitempty"`
	Id             openapi_types.UUID        `json:"id"`
	IsActive       bool                      `json:"is_active"`
	Kind           ProductKind               `json:"kind"`
	Name           string                    `json:"name"`

	// NetPrice Sales price including sales-side taxes
	NetPrice    *string                   `json:"net_price,omitempty"`
	Sku         *string                   `json:"sku,omitempty"`
	UnitSummary *string                   `json:"unit_summary,omitempty"`
	Units       *[]map[string]interface{} `json:"units,omitempty"`
	UpdatedAt   *time.Time                `json:"updated_at,omitempty"`
	Version     int64                     `json:"version"`
}

// ProductKind defines model for Product.Kind.
type ProductKind string

// ProductAttachment defines model for ProductAttachment.
type ProductAttachment struct {
	ArchivedAt       *time.Time          `json:"archived_at"`
	AttachmentKind   *string             `json:"attachment_kind,omitempty"`
	ByteSize         int64               `json:"byte_size"`
	ContentType      string              `json:"content_type"`
	Description      *string             `json:"description,omitempty"`
	DownloadUrl      *string             `json:"download_url,omitempty"`
	Id               openapi_types.UUID  `json:"id"`
	OriginalFilename string              `json:"original_filename"`
	ProductId        openapi_types.UUID  `json:"product_id"`
	Sha256           string              `json:"sha256"`
	VariantId        *openapi_types.UUID `json:"variant_id"`
}

// ProductAttachmentList defines model for ProductAttachmentList.
type ProductAttachmentList struct {
	Items      []ProductAttachment `json:"items"`
	NextCursor *string             `json:"next_cursor,omitempty"`
}

// ProductAttachmentUpload defines model for ProductAttachmentUpload.
type ProductAttachmentUpload struct {
	AttachmentKind *string             `json:"attachment_kind,omitempty"`
	Description    *string             `json:"description,omitempty"`
	File           openapi_types.File  `json:"file"`
	VariantId      *openapi_types.UUID `json:"variant_id,omitempty"`
}

// ProductImage defines model for ProductImage.
type ProductImage struct {
	ArchivedAt          *time.Time                      `json:"archived_at"`
	Height              int                             `json:"height"`
	Id                  openapi_types.UUID              `json:"id"`
	IsPrimary           *bool                           `json:"is_primary,omitempty"`
	Orientation         *int                            `json:"orientation,omitempty"`
	OriginalContentType ProductImageOriginalContentType `json:"original_content_type"`
	OriginalFilename    *string                         `json:"original_filename,omitempty"`
	OriginalSize        *int64                          `json:"original_size,omitempty"`
	Position            *int                            `json:"position,omitempty"`
	ProductId           openapi_types.UUID              `json:"product_id"`
	Sha256              string                          `json:"sha256"`
	VariantId           *openapi_types.UUID             `json:"variant_id"`
	Variants            []ProductImageVariant           `json:"variants"`
	Width               int                             `json:"width"`
}

// ProductImageOriginalContentType defines model for ProductImage.OriginalContentType.
type ProductImageOriginalContentType string

// ProductImageList defines model for ProductImageList.
type ProductImageList struct {
	Items      []ProductImage `json:"items"`
	NextCursor *string        `json:"next_cursor,omitempty"`
}

// ProductImagePresentation defines model for ProductImagePresentation.
type ProductImagePresentation struct {
	Archived  *bool `json:"archived,omitempty"`
	IsPrimary *bool `json:"is_primary,omitempty"`
	Position  *int  `json:"position,omitempty"`
}

// ProductImageUpload defines model for ProductImageUpload.
type ProductImageUpload struct {
	// File JPEG
	File      openapi_types.File  `json:"file"`
	IsPrimary *bool               `json:"is_primary,omitempty"`
	Position  *int                `json:"position,omitempty"`
	VariantId *openapi_types.UUID `json:"variant_id,omitempty"`
}

// ProductImageVariant defines model for ProductImageVariant.
type ProductImageVariant struct {
	ByteSize    int64                          `json:"byte_size"`
	ContentType ProductImageVariantContentType `json:"content_type"`
	Height      int                            `json:"height"`
	Name        ProductImageVariantName        `json:"name"`
	Sha256      string                         `json:"sha256"`
	StorageKey  *string                        `json:"storage_key,omitempty"`
	Url         *string                        `json:"url,omitempty"`
	Width       int                            `json:"width"`
}

// ProductImageVariantContentType defines model for ProductImageVariant.ContentType.
type ProductImageVariantContentType string

// ProductImageVariantName defines model for ProductImageVariant.Name.
type ProductImageVariantName string

// ProductInput defines model for ProductInput.
type ProductInput struct {
	AutoCode    *bool                     `json:"auto_code,omitempty"`
	Barcodes    *[]map[string]interface{} `json:"barcodes,omitempty"`
	BaseUnit    string                    `json:"base_unit"`
	BrandId     *openapi_types.UUID       `json:"brand_id,omitempty"`
	CategoryId  *openapi_types.UUID       `json:"category_id,omitempty"`
	Code        *string                   `json:"code,omitempty"`
	Description *string                   `json:"description,omitempty"`
	IsActive    *bool                     `json:"is_active,omitempty"`
	Kind        ProductInputKind          `json:"kind"`
	Name        string                    `json:"name"`
	Sku         *string                   `json:"sku,omitempty"`
	Units       *[]map[string]interface{} `json:"units,omitempty"`
}

// ProductInputKind defines model for ProductInput.Kind.
type ProductInputKind string

// ProductList defines model for ProductList.
type ProductList struct {
	Items      []Product `json:"items"`
	NextCursor *string   `json:"next_cursor,omitempty"`
}

// ProductVariant defines model for ProductVariant.
type ProductVariant struct {
	Attributes  *map[string]interface{} `json:"attributes,omitempty"`
	CreatedAt   *time.Time              `json:"created_at,omitempty"`
	Id          openapi_types.UUID      `json:"id"`
	IsActive    *bool                   `json:"is_active,omitempty"`
	ProductId   openapi_types.UUID      `json:"product_id"`
	UpdatedAt   *time.Time              `json:"updated_at,omitempty"`
	VariantCode string                  `json:"variant_code"`
	Version     int64                   `json:"version"`
}

// ProductVariantInput defines model for ProductVariantInput.
type ProductVariantInput struct {
	Attributes  *map[string]interface{} `json:"attributes,omitempty"`
	IsActive    *bool                   `json:"is_active,omitempty"`
	VariantCode string                  `json:"variant_code"`
}

// ProductVariantList defines model for ProductVariantList.
type ProductVariantList struct {
	Items      []ProductVariant `json:"items"`
	NextCursor *string          `json:"next_cursor,omitempty"`
}

// PurchaseDocument defines model for PurchaseDocument.
type PurchaseDocument struct {
	union json.RawMessage
}

// PurchaseDocumentInput defines model for PurchaseDocumentInput.
type PurchaseDocumentInput struct {
	union json.RawMessage
}

// PurchaseDocumentList defines model for PurchaseDocumentList.
type PurchaseDocumentList struct {
	Items      []PurchaseListItem `json:"items"`
	NextCursor *string            `json:"next_cursor,omitempty"`
}

// PurchaseInvoice defines model for PurchaseInvoice.
type PurchaseInvoice = PurchaseInvoiceInput

// PurchaseInvoiceInput defines model for PurchaseInvoiceInput.
type PurchaseInvoiceInput struct {
	BranchId openapi_types.UUID `json:"branch_id"`
	Currency string             `json:"currency"`
	DueDate  *time.Time         `json:"due_date"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate    *Decimal              `json:"exchange_rate,omitempty"`
	GoodsReceiptId  *openapi_types.UUID   `json:"goods_receipt_id,omitempty"`
	GoodsReceiptIds *[]openapi_types.UUID `json:"goods_receipt_ids,omitempty"`
	InvoiceDate     time.Time             `json:"invoice_date"`
	InvoiceNo       *string               `json:"invoice_no,omitempty"`
	Lines           []struct {
		// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
		BaseQuantity *Decimal `json:"base_quantity,omitempty"`

		// ConversionFactor Exact base-10 decimal; never an IEEE-754 number.
		ConversionFactor    *Decimal `json:"conversion_factor,omitempty"`
		DescriptionSnapshot string   `json:"description_snapshot"`

		// DiscountAmount Exact base-10 decimal; never an IEEE-754 number.
		DiscountAmount     *Decimal            `json:"discount_amount,omitempty"`
		GoodsReceiptLineId *openapi_types.UUID `json:"goods_receipt_line_id,omitempty"`

		// GrossAmount Exact base-10 decimal; never an IEEE-754 number.
		GrossAmount Decimal                           `json:"gross_amount"`
		Id          *openapi_types.UUID               `json:"id,omitempty"`
		LineNo      *int                              `json:"line_no,omitempty"`
		LineType    PurchaseInvoiceInputLinesLineType `json:"line_type"`

		// PayableAmount Exact base-10 decimal; never an IEEE-754 number.
		PayableAmount       Decimal             `json:"payable_amount"`
		ProductId           openapi_types.UUID  `json:"product_id"`
		PurchaseOrderLineId *openapi_types.UUID `json:"purchase_order_line_id,omitempty"`

		// Quantity Exact base-10 decimal; never an IEEE-754 number.
		Quantity Decimal `json:"quantity"`

		// TaxAmount Exact base-10 decimal; never an IEEE-754 number.
		TaxAmount Decimal `json:"tax_amount"`

		// TaxBase Exact base-10 decimal; never an IEEE-754 number.
		TaxBase               Decimal                   `json:"tax_base"`
		TaxComponentsSnapshot *[]map[string]interface{} `json:"tax_components_snapshot,omitempty"`
		UnitCode              *string                   `json:"unit_code,omitempty"`

		// UnitPrice Exact base-10 decimal; never an IEEE-754 number.
		UnitPrice Decimal             `json:"unit_price"`
		VariantId *openapi_types.UUID `json:"variant_id"`

		// WarehouseId Required for PRODUCT; omitted for SERVICE.
		WarehouseId *openapi_types.UUID `json:"warehouse_id"`

		// WithholdingAmount Exact base-10 decimal; never an IEEE-754 number.
		WithholdingAmount *Decimal `json:"withholding_amount,omitempty"`
	} `json:"lines"`
	PurchaseOrderId *openapi_types.UUID `json:"purchase_order_id,omitempty"`
	Standalone      *bool               `json:"standalone,omitempty"`
	SupplierId      openapi_types.UUID  `json:"supplier_id"`
	WarehouseId     *openapi_types.UUID `json:"warehouse_id"`
}

// PurchaseInvoiceInputLinesLineType defines model for PurchaseInvoiceInput.Lines.LineType.
type PurchaseInvoiceInputLinesLineType string

// PurchaseListItem defines model for PurchaseListItem.
type PurchaseListItem struct {
	BranchId          openapi_types.UUID                 `json:"branch_id"`
	CompanyId         *openapi_types.UUID                `json:"company_id,omitempty"`
	Currency          string                             `json:"currency"`
	DocumentDate      openapi_types.Date                 `json:"document_date"`
	DocumentNo        string                             `json:"document_no"`
	FulfillmentAt     *time.Time                         `json:"fulfillment_at"`
	FulfillmentStatus *PurchaseListItemFulfillmentStatus `json:"fulfillment_status,omitempty"`
	Id                openapi_types.UUID                 `json:"id"`
	InvoicingStatus   *PurchaseListItemInvoicingStatus   `json:"invoicing_status,omitempty"`
	Kind              PurchaseListItemKind               `json:"kind"`
	LifecycleStatus   *PurchaseListItemLifecycleStatus   `json:"lifecycle_status,omitempty"`
	PaymentStatus     *PurchaseListItemPaymentStatus     `json:"payment_status,omitempty"`
	Status            string                             `json:"status"`
	SupplierCode      *string                            `json:"supplier_code,omitempty"`
	SupplierId        openapi_types.UUID                 `json:"supplier_id"`
	SupplierName      *string                            `json:"supplier_name,omitempty"`

	// Total Exact base-10 decimal; never an IEEE-754 number.
	Total       Decimal             `json:"total"`
	Version     int64               `json:"version"`
	WarehouseId *openapi_types.UUID `json:"warehouse_id,omitempty"`
}

// PurchaseListItemFulfillmentStatus defines model for PurchaseListItem.FulfillmentStatus.
type PurchaseListItemFulfillmentStatus string

// PurchaseListItemInvoicingStatus defines model for PurchaseListItem.InvoicingStatus.
type PurchaseListItemInvoicingStatus string

// PurchaseListItemKind defines model for PurchaseListItem.Kind.
type PurchaseListItemKind string

// PurchaseListItemLifecycleStatus defines model for PurchaseListItem.LifecycleStatus.
type PurchaseListItemLifecycleStatus string

// PurchaseListItemPaymentStatus defines model for PurchaseListItem.PaymentStatus.
type PurchaseListItemPaymentStatus string

// PurchaseOrder defines model for PurchaseOrder.
type PurchaseOrder = PurchaseOrderInput

// PurchaseOrderInput defines model for PurchaseOrderInput.
type PurchaseOrderInput struct {
	BranchId openapi_types.UUID `json:"branch_id"`
	Currency string             `json:"currency"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate *Decimal `json:"exchange_rate,omitempty"`
	Lines        []struct {
		// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
		BaseQuantity *Decimal `json:"base_quantity,omitempty"`

		// ConversionFactor Exact base-10 decimal; never an IEEE-754 number.
		ConversionFactor *Decimal            `json:"conversion_factor,omitempty"`
		Currency         *string             `json:"currency,omitempty"`
		Id               *openapi_types.UUID `json:"id,omitempty"`

		// InvoicedQuantity Exact base-10 decimal; never an IEEE-754 number.
		InvoicedQuantity *Decimal                        `json:"invoiced_quantity,omitempty"`
		LineNo           *int                            `json:"line_no,omitempty"`
		LineType         PurchaseOrderInputLinesLineType `json:"line_type"`

		// OrderedQuantity Exact base-10 decimal; never an IEEE-754 number.
		OrderedQuantity     Decimal            `json:"ordered_quantity"`
		ProductCodeSnapshot *string            `json:"product_code_snapshot,omitempty"`
		ProductId           openapi_types.UUID `json:"product_id"`
		ProductNameSnapshot string             `json:"product_name_snapshot"`

		// ReceivedQuantity Exact base-10 decimal; never an IEEE-754 number.
		ReceivedQuantity            *Decimal                `json:"received_quantity,omitempty"`
		SupplierProductCodeSnapshot *string                 `json:"supplier_product_code_snapshot,omitempty"`
		TaxSnapshot                 *map[string]interface{} `json:"tax_snapshot,omitempty"`
		UnitCode                    string                  `json:"unit_code"`

		// UnitPrice Exact base-10 decimal; never an IEEE-754 number.
		UnitPrice Decimal             `json:"unit_price"`
		VariantId *openapi_types.UUID `json:"variant_id"`

		// WarehouseId Required for PRODUCT; omitted for SERVICE.
		WarehouseId *openapi_types.UUID `json:"warehouse_id"`
	} `json:"lines"`
	Notes              *string                               `json:"notes,omitempty"`
	OrderDate          *time.Time                            `json:"order_date,omitempty"`
	OrderNo            *string                               `json:"order_no,omitempty"`
	OverDeliveryPolicy *PurchaseOrderInputOverDeliveryPolicy `json:"over_delivery_policy,omitempty"`
	SupplierId         openapi_types.UUID                    `json:"supplier_id"`
	WarehouseId        openapi_types.UUID                    `json:"warehouse_id"`
}

// PurchaseOrderInputLinesLineType defines model for PurchaseOrderInput.Lines.LineType.
type PurchaseOrderInputLinesLineType string

// PurchaseOrderInputOverDeliveryPolicy defines model for PurchaseOrderInput.OverDeliveryPolicy.
type PurchaseOrderInputOverDeliveryPolicy string

// PurchaseReturn defines model for PurchaseReturn.
type PurchaseReturn = PurchaseReturnInput

// PurchaseReturnInput defines model for PurchaseReturnInput.
type PurchaseReturnInput struct {
	BranchId openapi_types.UUID `json:"branch_id"`
	Currency string             `json:"currency"`

	// ExchangeRate Exact base-10 decimal; never an IEEE-754 number.
	ExchangeRate *Decimal `json:"exchange_rate,omitempty"`
	Lines        []struct {
		// BaseQuantity Exact base-10 decimal; never an IEEE-754 number.
		BaseQuantity *Decimal `json:"base_quantity,omitempty"`

		// ConversionFactor Exact base-10 decimal; never an IEEE-754 number.
		ConversionFactor *Decimal            `json:"conversion_factor,omitempty"`
		Currency         *string             `json:"currency,omitempty"`
		Id               *openapi_types.UUID `json:"id,omitempty"`
		LineNo           *int                `json:"line_no,omitempty"`
		ProductId        openapi_types.UUID  `json:"product_id"`

		// Quantity Exact base-10 decimal; never an IEEE-754 number.
		Quantity            Decimal             `json:"quantity"`
		Reason              *string             `json:"reason,omitempty"`
		SourceReceiptLineId *openapi_types.UUID `json:"source_receipt_line_id,omitempty"`
		UnitCode            string              `json:"unit_code"`

		// UnitCost Exact base-10 decimal; never an IEEE-754 number.
		UnitCost    Decimal             `json:"unit_cost"`
		VariantId   *openapi_types.UUID `json:"variant_id"`
		WarehouseId *openapi_types.UUID `json:"warehouse_id,omitempty"`
	} `json:"lines"`
	Reason          string              `json:"reason"`
	ReturnDate      time.Time           `json:"return_date"`
	ReturnNo        *string             `json:"return_no,omitempty"`
	SourceReceiptId *openapi_types.UUID `json:"source_receipt_id,omitempty"`
	SupplierId      openapi_types.UUID  `json:"supplier_id"`
	WarehouseId     openapi_types.UUID  `json:"warehouse_id"`
}

// ReferenceInput defines model for ReferenceInput.
type ReferenceInput struct {
	Code string `json:"code"`
	Name string `json:"name"`
}

// ReferenceList defines model for ReferenceList.
type ReferenceList struct {
	Items []map[string]interface{} `json:"items"`
}

// Role defines model for Role.
type Role struct {
	Id          openapi_types.UUID `json:"id"`
	IsSystem    bool               `json:"is_system"`
	Name        string             `json:"name"`
	Permissions []string           `json:"permissions"`
	Version     int64              `json:"version"`
}

// RoleRequest defines model for RoleRequest.
type RoleRequest struct {
	Name        string   `json:"name"`
	Permissions []string `json:"permissions"`
}

// SessionResponse defines model for SessionResponse.
type SessionResponse struct {
	Companies        []CompanySummary    `json:"companies"`
	CsrfToken        string              `json:"csrf_token"`
	CurrentCompanyId *openapi_types.UUID `json:"current_company_id,omitempty"`
	ExpiresAt        time.Time           `json:"expires_at"`
	Permissions      []string            `json:"permissions"`
	User             struct {
		DisplayName string              `json:"display_name"`
		Email       openapi_types.Email `json:"email"`
		Id          openapi_types.UUID  `json:"id"`
		TotpEnabled bool                `json:"totp_enabled"`
	} `json:"user"`
}

// SetupRequest defines model for SetupRequest.
type SetupRequest struct {
	AdminEmail openapi_types.Email    `json:"admin_email"`
	AdminName  string                 `json:"admin_name"`
	EntityType SetupRequestEntityType `json:"entity_type"`
	LegalName  string                 `json:"legal_name"`
	Password   string                 `json:"password"`
	TaxNumber  *string                `json:"tax_number,omitempty"`
	TradeName  string                 `json:"trade_name"`
}

// SetupRequestEntityType defines model for SetupRequest.EntityType.
type SetupRequestEntityType string

// SetupStatus defines model for SetupStatus.
type SetupStatus struct {
	Complete bool `json:"complete"`
}

// SourceDocumentReference defines model for SourceDocumentReference.
type SourceDocumentReference struct {
	Direction        *SourceDocumentReferenceDirection    `json:"direction,omitempty"`
	DocumentNo       *string                              `json:"document_no,omitempty"`
	DocumentTypeCode *string                              `json:"document_type_code,omitempty"`
	Id               *openapi_types.UUID                  `json:"id,omitempty"`
	Kind             *string                              `json:"kind,omitempty"`
	LifecycleStatus  *string                              `json:"lifecycle_status,omitempty"`
	RelationType     *SourceDocumentReferenceRelationType `json:"relation_type,omitempty"`
	Status           *string                              `json:"status,omitempty"`
}

// SourceDocumentReferenceDirection defines model for SourceDocumentReference.Direction.
type SourceDocumentReferenceDirection string

// SourceDocumentReferenceRelationType defines model for SourceDocumentReference.RelationType.
type SourceDocumentReferenceRelationType string

// StockCount defines model for StockCount.
type StockCount = StockCountRequest

// StockCountEngine defines model for StockCountEngine.
type StockCountEngine struct {
	BlindCount  *bool                     `json:"blind_count,omitempty"`
	CompanyId   openapi_types.UUID        `json:"company_id"`
	CountNo     string                    `json:"count_no"`
	Description string                    `json:"description"`
	Exceptions  *[]map[string]interface{} `json:"exceptions,omitempty"`

	// FinishedAt Posting or cancellation timestamp
	FinishedAt     *time.Time                      `json:"finished_at"`
	Id             openapi_types.UUID              `json:"id"`
	Lines          []map[string]interface{}        `json:"lines"`
	MovementPolicy *StockCountEngineMovementPolicy `json:"movement_policy,omitempty"`
	Passes         []StockCountPass                `json:"passes"`
	ScopeMode      StockCountEngineScopeMode       `json:"scope_mode"`
	SnapshotAt     *time.Time                      `json:"snapshot_at,omitempty"`

	// StartedAt Count snapshot/start timestamp
	StartedAt     time.Time              `json:"started_at"`
	State         StockCountEngineState  `json:"state"`
	Status        StockCountEngineStatus `json:"status"`
	Version       *int64                 `json:"version,omitempty"`
	WarehouseCode string                 `json:"warehouse_code"`
	WarehouseId   openapi_types.UUID     `json:"warehouse_id"`
	WarehouseName string                 `json:"warehouse_name"`
}

// StockCountEngineMovementPolicy defines model for StockCountEngine.MovementPolicy.
type StockCountEngineMovementPolicy string

// StockCountEngineScopeMode defines model for StockCountEngine.ScopeMode.
type StockCountEngineScopeMode string

// StockCountEngineState defines model for StockCountEngine.State.
type StockCountEngineState string

// StockCountEngineStatus defines model for StockCountEngine.Status.
type StockCountEngineStatus string

// StockCountEngineList defines model for StockCountEngineList.
type StockCountEngineList struct {
	Items      []StockCountEngine `json:"items"`
	NextCursor *string            `json:"next_cursor,omitempty"`
}

// StockCountPass defines model for StockCountPass.
type StockCountPass struct {
	Id     openapi_types.UUID  `json:"id"`
	Mode   StockCountPassMode  `json:"mode"`
	PassNo int                 `json:"pass_no"`
	State  StockCountPassState `json:"state"`
}

// StockCountPassMode defines model for StockCountPass.Mode.
type StockCountPassMode string

// StockCountPassState defines model for StockCountPass.State.
type StockCountPassState string

// StockCountRequest defines model for StockCountRequest.
type StockCountRequest struct {
	Lines       []map[string]interface{} `json:"lines"`
	WarehouseId openapi_types.UUID       `json:"warehouse_id"`
}

// StockCountScanEvent defines model for StockCountScanEvent.
type StockCountScanEvent struct {
	Barcode string `json:"barcode"`
	EventId string `json:"event_id"`

	// Quantity Exact base-10 decimal; never an IEEE-754 number.
	Quantity  Decimal    `json:"quantity"`
	ScannedAt *time.Time `json:"scanned_at,omitempty"`
}

// StockMovement defines model for StockMovement.
type StockMovement = StockMovementRequest

// StockMovementRequest defines model for StockMovementRequest.
type StockMovementRequest struct {
	Direction StockMovementRequestDirection `json:"direction"`
	ProductId openapi_types.UUID            `json:"product_id"`

	// Quantity Exact base-10 decimal; never an IEEE-754 number.
	Quantity          Decimal `json:"quantity"`
	ReasonCode        string  `json:"reason_code"`
	ReasonDescription *string `json:"reason_description,omitempty"`

	// UnitCost Exact base-10 decimal; never an IEEE-754 number.
	UnitCost    *Decimal           `json:"unit_cost,omitempty"`
	WarehouseId openapi_types.UUID `json:"warehouse_id"`
}

// StockMovementRequestDirection defines model for StockMovementRequest.Direction.
type StockMovementRequestDirection string

// StockPosition defines model for StockPosition.
type StockPosition struct {
	// AvailableQuantity Exact base-10 decimal; never an IEEE-754 number.
	AvailableQuantity Decimal             `json:"available_quantity"`
	CompanyId         openapi_types.UUID  `json:"company_id"`
	Id                *openapi_types.UUID `json:"id,omitempty"`
	LocationId        *openapi_types.UUID `json:"location_id"`
	LotId             *openapi_types.UUID `json:"lot_id"`

	// PhysicalQuantity Exact base-10 decimal; never an IEEE-754 number.
	PhysicalQuantity Decimal            `json:"physical_quantity"`
	ProductId        openapi_types.UUID `json:"product_id"`

	// ReservedQuantity Exact base-10 decimal; never an IEEE-754 number.
	ReservedQuantity Decimal             `json:"reserved_quantity"`
	SerialId         *openapi_types.UUID `json:"serial_id"`
	VariantId        *openapi_types.UUID `json:"variant_id"`
	WarehouseId      openapi_types.UUID  `json:"warehouse_id"`
}

// SupplierProductReference defines model for SupplierProductReference.
type SupplierProductReference struct {
	Barcode      *string             `json:"barcode,omitempty"`
	Id           *openapi_types.UUID `json:"id,omitempty"`
	IsActive     *bool               `json:"is_active,omitempty"`
	ProductId    openapi_types.UUID  `json:"product_id"`
	SupplierCode *string             `json:"supplier_code,omitempty"`
	SupplierId   openapi_types.UUID  `json:"supplier_id"`
	VariantId    *openapi_types.UUID `json:"variant_id"`
	Version      *int64              `json:"version,omitempty"`
}

// TRYAmount defines model for TRYAmount.
type TRYAmount = string

// TablePreference defines model for TablePreference.
type TablePreference struct {
	// ColumnVisibility Column IDs mapped to visibility; false entries are persisted as hidden columns.
	ColumnVisibility map[string]bool `json:"column_visibility"`
	TableKey         string          `json:"table_key"`
	UpdatedAt        *time.Time      `json:"updated_at,omitempty"`
	Version          int64           `json:"version"`
}

// TablePreferenceRequest defines model for TablePreferenceRequest.
type TablePreferenceRequest struct {
	// ColumnVisibility Column IDs mapped to visibility; false entries are persisted as hidden columns.
	ColumnVisibility map[string]bool `json:"column_visibility"`
}

// TaxDefinition defines model for TaxDefinition.
type TaxDefinition struct {
	CalculationType *TaxDefinitionCalculationType `json:"calculation_type,omitempty"`
	Code            string                        `json:"code"`
	Description     *string                       `json:"description,omitempty"`
	Id              *openapi_types.UUID           `json:"id,omitempty"`
	IsActive        *bool                         `json:"is_active,omitempty"`
	Metadata        *map[string]interface{}       `json:"metadata,omitempty"`
	Name            string                        `json:"name"`

	// Rate Exact base-10 decimal; never an IEEE-754 number.
	Rate            *Decimal `json:"rate,omitempty"`
	Source          string   `json:"source"`
	SourceReference *string  `json:"source_reference,omitempty"`
	SourceVersion   *string  `json:"source_version,omitempty"`
	Version         *int64   `json:"version,omitempty"`
}

// TaxDefinitionCalculationType defines model for TaxDefinition.CalculationType.
type TaxDefinitionCalculationType string

// TaxOfficeReference defines model for TaxOfficeReference.
type TaxOfficeReference struct {
	// Code Official accounting-unit code; null for code-less branches
	Code         *string                      `json:"code"`
	DistrictName string                       `json:"district_name"`
	Id           openapi_types.UUID           `json:"id"`
	IsActive     bool                         `json:"is_active"`
	Name         string                       `json:"name"`
	OfficeType   TaxOfficeReferenceOfficeType `json:"office_type"`
	ProvinceId   int64                        `json:"province_id"`
	ProvinceName string                       `json:"province_name"`
}

// TaxOfficeReferenceOfficeType defines model for TaxOfficeReference.OfficeType.
type TaxOfficeReferenceOfficeType string

// TaxOfficeReferenceList defines model for TaxOfficeReferenceList.
type TaxOfficeReferenceList struct {
	Items []TaxOfficeReference `json:"items"`
}

// TaxRate defines model for TaxRate.
type TaxRate struct {
	CalculationType *TaxRateCalculationType `json:"calculation_type,omitempty"`
	Id              *openapi_types.UUID     `json:"id,omitempty"`
	Metadata        *map[string]interface{} `json:"metadata,omitempty"`

	// Rate Exact base-10 decimal; never an IEEE-754 number.
	Rate            Decimal             `json:"rate"`
	Source          string              `json:"source"`
	SourceReference *string             `json:"source_reference,omitempty"`
	SourceVersion   *string             `json:"source_version,omitempty"`
	TaxDefinitionId openapi_types.UUID  `json:"tax_definition_id"`
	ValidFrom       openapi_types.Date  `json:"valid_from"`
	ValidTo         *openapi_types.Date `json:"valid_to"`
	Version         *int64              `json:"version,omitempty"`
}

// TaxRateCalculationType defines model for TaxRate.CalculationType.
type TaxRateCalculationType string

// Transfer defines model for Transfer.
type Transfer = TransferRequest

// TransferRequest defines model for TransferRequest.
type TransferRequest struct {
	DestinationWarehouseId openapi_types.UUID           `json:"destination_warehouse_id"`
	Lines                  []map[string]interface{}     `json:"lines"`
	Notes                  *string                      `json:"notes,omitempty"`
	SourceWarehouseId      openapi_types.UUID           `json:"source_warehouse_id"`
	TransferType           *TransferRequestTransferType `json:"transfer_type,omitempty"`
}

// TransferRequestTransferType defines model for TransferRequest.TransferType.
type TransferRequestTransferType string

// TurkishDistrict defines model for TurkishDistrict.
type TurkishDistrict struct {
	Id         int64  `json:"id"`
	Name       string `json:"name"`
	ProvinceId int64  `json:"province_id"`
}

// TurkishNeighborhood defines model for TurkishNeighborhood.
type TurkishNeighborhood struct {
	DistrictId int64  `json:"district_id"`
	Id         int64  `json:"id"`
	Name       string `json:"name"`
}

// TurkishProvince defines model for TurkishProvince.
type TurkishProvince struct {
	Id        int64  `json:"id"`
	Name      string `json:"name"`
	PlateCode string `json:"plate_code"`
}

// UserMembershipRequest defines model for UserMembershipRequest.
type UserMembershipRequest struct {
	BranchIds   *[]openapi_types.UUID `json:"branch_ids,omitempty"`
	DisplayName *string               `json:"display_name,omitempty"`
	Email       openapi_types.Email   `json:"email"`

	// Password Required only when creating a new global user
	Password     *string               `json:"password,omitempty"`
	RoleIds      []openapi_types.UUID  `json:"role_ids"`
	WarehouseIds *[]openapi_types.UUID `json:"warehouse_ids,omitempty"`
}

// VariantBarcodeInput defines model for VariantBarcodeInput.
type VariantBarcodeInput struct {
	Barcode     string  `json:"barcode"`
	BarcodeType *string `json:"barcode_type,omitempty"`
	IsPrimary   *bool   `json:"is_primary,omitempty"`
}

// VariantBarcodeReplacementInput defines model for VariantBarcodeReplacementInput.
type VariantBarcodeReplacementInput struct {
	Barcodes []VariantBarcodeInput `json:"barcodes"`
}

// Warehouse defines model for Warehouse.
type Warehouse struct {
	Address           *string             `json:"address,omitempty"`
	BranchId          *openapi_types.UUID `json:"branch_id"`
	CanDelete         *bool               `json:"can_delete,omitempty"`
	Code              string              `json:"code"`
	Id                openapi_types.UUID  `json:"id"`
	IsActive          *bool               `json:"is_active,omitempty"`
	Name              string              `json:"name"`
	ResponsibleUserId *openapi_types.UUID `json:"responsible_user_id"`
	Type              WarehouseType       `json:"type"`
	UsesLocations     *bool               `json:"uses_locations,omitempty"`
	Version           int64               `json:"version"`
}

// WarehouseType defines model for Warehouse.Type.
type WarehouseType string

// WarehouseInput defines model for WarehouseInput.
type WarehouseInput struct {
	Address           *string             `json:"address,omitempty"`
	BranchId          *openapi_types.UUID `json:"branch_id"`
	Code              string              `json:"code"`
	Name              string              `json:"name"`
	ResponsibleUserId *openapi_types.UUID `json:"responsible_user_id"`
	Type              WarehouseInputType  `json:"type"`
	UsesLocations     *bool               `json:"uses_locations,omitempty"`
}

// WarehouseInputType defines model for WarehouseInput.Type.
type WarehouseInputType string

// WarehouseUpdateInput defines model for WarehouseUpdateInput.
type WarehouseUpdateInput struct {
	Address  *string `json:"address,omitempty"`
	Code     string  `json:"code"`
	IsActive *bool   `json:"is_active,omitempty"`
	Name     string  `json:"name"`

	// Type Warehouse type cannot be changed after creation
	Type WarehouseUpdateInputType `json:"type"`
}

// WarehouseUpdateInputType Warehouse type cannot be changed after creation
type WarehouseUpdateInputType string

// CSRFToken defines model for CSRFToken.
type CSRFToken = string

// CommercialBranchFilter defines model for CommercialBranchFilter.
type CommercialBranchFilter = openapi_types.UUID

// CommercialCommand defines model for CommercialCommand.
type CommercialCommand string

// CommercialCurrencyFilter defines model for CommercialCurrencyFilter.
type CommercialCurrencyFilter = string

// CommercialDocumentID defines model for CommercialDocumentID.
type CommercialDocumentID = openapi_types.UUID

// CommercialFulfillmentFilter defines model for CommercialFulfillmentFilter.
type CommercialFulfillmentFilter string

// CommercialInvoicingFilter defines model for CommercialInvoicingFilter.
type CommercialInvoicingFilter string

// CommercialLifecycleFilter defines model for CommercialLifecycleFilter.
type CommercialLifecycleFilter string

// CommercialPaymentFilter defines model for CommercialPaymentFilter.
type CommercialPaymentFilter string

// IdempotencyKey defines model for IdempotencyKey.
type IdempotencyKey = string

// IfMatch defines model for IfMatch.
type IfMatch = string

// PartyID defines model for PartyID.
type PartyID = openapi_types.UUID

// AsTurkishProvince returns the union data inside the AddressReferenceList_Items_Item as a TurkishProvince
func (t AddressReferenceList_Items_Item) AsTurkishProvince() (TurkishProvince, error) {
	var body TurkishProvince
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromTurkishProvince overwrites any union data inside the AddressReferenceList_Items_Item as the provided TurkishProvince
func (t *AddressReferenceList_Items_Item) FromTurkishProvince(v TurkishProvince) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeTurkishProvince performs a merge with any union data inside the AddressReferenceList_Items_Item, using the provided TurkishProvince
func (t *AddressReferenceList_Items_Item) MergeTurkishProvince(v TurkishProvince) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsTurkishDistrict returns the union data inside the AddressReferenceList_Items_Item as a TurkishDistrict
func (t AddressReferenceList_Items_Item) AsTurkishDistrict() (TurkishDistrict, error) {
	var body TurkishDistrict
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromTurkishDistrict overwrites any union data inside the AddressReferenceList_Items_Item as the provided TurkishDistrict
func (t *AddressReferenceList_Items_Item) FromTurkishDistrict(v TurkishDistrict) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeTurkishDistrict performs a merge with any union data inside the AddressReferenceList_Items_Item, using the provided TurkishDistrict
func (t *AddressReferenceList_Items_Item) MergeTurkishDistrict(v TurkishDistrict) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsTurkishNeighborhood returns the union data inside the AddressReferenceList_Items_Item as a TurkishNeighborhood
func (t AddressReferenceList_Items_Item) AsTurkishNeighborhood() (TurkishNeighborhood, error) {
	var body TurkishNeighborhood
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromTurkishNeighborhood overwrites any union data inside the AddressReferenceList_Items_Item as the provided TurkishNeighborhood
func (t *AddressReferenceList_Items_Item) FromTurkishNeighborhood(v TurkishNeighborhood) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeTurkishNeighborhood performs a merge with any union data inside the AddressReferenceList_Items_Item, using the provided TurkishNeighborhood
func (t *AddressReferenceList_Items_Item) MergeTurkishNeighborhood(v TurkishNeighborhood) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t AddressReferenceList_Items_Item) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *AddressReferenceList_Items_Item) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}

// AsPurchaseOrder returns the union data inside the PurchaseDocument as a PurchaseOrder
func (t PurchaseDocument) AsPurchaseOrder() (PurchaseOrder, error) {
	var body PurchaseOrder
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromPurchaseOrder overwrites any union data inside the PurchaseDocument as the provided PurchaseOrder
func (t *PurchaseDocument) FromPurchaseOrder(v PurchaseOrder) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergePurchaseOrder performs a merge with any union data inside the PurchaseDocument, using the provided PurchaseOrder
func (t *PurchaseDocument) MergePurchaseOrder(v PurchaseOrder) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsGoodsReceipt returns the union data inside the PurchaseDocument as a GoodsReceipt
func (t PurchaseDocument) AsGoodsReceipt() (GoodsReceipt, error) {
	var body GoodsReceipt
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromGoodsReceipt overwrites any union data inside the PurchaseDocument as the provided GoodsReceipt
func (t *PurchaseDocument) FromGoodsReceipt(v GoodsReceipt) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeGoodsReceipt performs a merge with any union data inside the PurchaseDocument, using the provided GoodsReceipt
func (t *PurchaseDocument) MergeGoodsReceipt(v GoodsReceipt) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsPurchaseInvoice returns the union data inside the PurchaseDocument as a PurchaseInvoice
func (t PurchaseDocument) AsPurchaseInvoice() (PurchaseInvoice, error) {
	var body PurchaseInvoice
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromPurchaseInvoice overwrites any union data inside the PurchaseDocument as the provided PurchaseInvoice
func (t *PurchaseDocument) FromPurchaseInvoice(v PurchaseInvoice) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergePurchaseInvoice performs a merge with any union data inside the PurchaseDocument, using the provided PurchaseInvoice
func (t *PurchaseDocument) MergePurchaseInvoice(v PurchaseInvoice) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsPurchaseReturn returns the union data inside the PurchaseDocument as a PurchaseReturn
func (t PurchaseDocument) AsPurchaseReturn() (PurchaseReturn, error) {
	var body PurchaseReturn
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromPurchaseReturn overwrites any union data inside the PurchaseDocument as the provided PurchaseReturn
func (t *PurchaseDocument) FromPurchaseReturn(v PurchaseReturn) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergePurchaseReturn performs a merge with any union data inside the PurchaseDocument, using the provided PurchaseReturn
func (t *PurchaseDocument) MergePurchaseReturn(v PurchaseReturn) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t PurchaseDocument) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *PurchaseDocument) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}

// AsPurchaseOrderInput returns the union data inside the PurchaseDocumentInput as a PurchaseOrderInput
func (t PurchaseDocumentInput) AsPurchaseOrderInput() (PurchaseOrderInput, error) {
	var body PurchaseOrderInput
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromPurchaseOrderInput overwrites any union data inside the PurchaseDocumentInput as the provided PurchaseOrderInput
func (t *PurchaseDocumentInput) FromPurchaseOrderInput(v PurchaseOrderInput) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergePurchaseOrderInput performs a merge with any union data inside the PurchaseDocumentInput, using the provided PurchaseOrderInput
func (t *PurchaseDocumentInput) MergePurchaseOrderInput(v PurchaseOrderInput) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsGoodsReceiptInput returns the union data inside the PurchaseDocumentInput as a GoodsReceiptInput
func (t PurchaseDocumentInput) AsGoodsReceiptInput() (GoodsReceiptInput, error) {
	var body GoodsReceiptInput
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromGoodsReceiptInput overwrites any union data inside the PurchaseDocumentInput as the provided GoodsReceiptInput
func (t *PurchaseDocumentInput) FromGoodsReceiptInput(v GoodsReceiptInput) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergeGoodsReceiptInput performs a merge with any union data inside the PurchaseDocumentInput, using the provided GoodsReceiptInput
func (t *PurchaseDocumentInput) MergeGoodsReceiptInput(v GoodsReceiptInput) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsPurchaseInvoiceInput returns the union data inside the PurchaseDocumentInput as a PurchaseInvoiceInput
func (t PurchaseDocumentInput) AsPurchaseInvoiceInput() (PurchaseInvoiceInput, error) {
	var body PurchaseInvoiceInput
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromPurchaseInvoiceInput overwrites any union data inside the PurchaseDocumentInput as the provided PurchaseInvoiceInput
func (t *PurchaseDocumentInput) FromPurchaseInvoiceInput(v PurchaseInvoiceInput) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergePurchaseInvoiceInput performs a merge with any union data inside the PurchaseDocumentInput, using the provided PurchaseInvoiceInput
func (t *PurchaseDocumentInput) MergePurchaseInvoiceInput(v PurchaseInvoiceInput) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

// AsPurchaseReturnInput returns the union data inside the PurchaseDocumentInput as a PurchaseReturnInput
func (t PurchaseDocumentInput) AsPurchaseReturnInput() (PurchaseReturnInput, error) {
	var body PurchaseReturnInput
	err := json.Unmarshal(t.union, &body)
	return body, err
}

// FromPurchaseReturnInput overwrites any union data inside the PurchaseDocumentInput as the provided PurchaseReturnInput
func (t *PurchaseDocumentInput) FromPurchaseReturnInput(v PurchaseReturnInput) error {
	b, err := json.Marshal(v)
	t.union = b
	return err
}

// MergePurchaseReturnInput performs a merge with any union data inside the PurchaseDocumentInput, using the provided PurchaseReturnInput
func (t *PurchaseDocumentInput) MergePurchaseReturnInput(v PurchaseReturnInput) error {
	b, err := json.Marshal(v)
	if err != nil {
		return err
	}

	merged, err := runtime.JSONMerge(t.union, b)
	t.union = merged
	return err
}

func (t PurchaseDocumentInput) MarshalJSON() ([]byte, error) {
	b, err := t.union.MarshalJSON()
	return b, err
}

func (t *PurchaseDocumentInput) UnmarshalJSON(b []byte) error {
	err := t.union.UnmarshalJSON(b)
	return err
}

// ServerInterface represents all server handlers.
type ServerInterface interface {
	// Process liveness
	// (GET /health/live)
	GetLiveness(w http.ResponseWriter, r *http.Request)
	// Database and migration readiness
	// (GET /health/ready)
	GetReadiness(w http.ResponseWriter, r *http.Request)
}

// Unimplemented server implementation that returns http.StatusNotImplemented for each endpoint.

type Unimplemented struct{}

// Process liveness
// (GET /health/live)
func (_ Unimplemented) GetLiveness(w http.ResponseWriter, r *http.Request) {
	w.WriteHeader(http.StatusNotImplemented)
}

// Database and migration readiness
// (GET /health/ready)
func (_ Unimplemented) GetReadiness(w http.ResponseWriter, r *http.Request) {
	w.WriteHeader(http.StatusNotImplemented)
}

// ServerInterfaceWrapper converts contexts to parameters.
type ServerInterfaceWrapper struct {
	Handler            ServerInterface
	HandlerMiddlewares []MiddlewareFunc
	ErrorHandlerFunc   func(w http.ResponseWriter, r *http.Request, err error)
}

type MiddlewareFunc func(http.Handler) http.Handler

// GetLiveness operation middleware
func (siw *ServerInterfaceWrapper) GetLiveness(w http.ResponseWriter, r *http.Request) {

	handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		siw.Handler.GetLiveness(w, r)
	}))

	for _, middleware := range siw.HandlerMiddlewares {
		handler = middleware(handler)
	}

	handler.ServeHTTP(w, r)
}

// GetReadiness operation middleware
func (siw *ServerInterfaceWrapper) GetReadiness(w http.ResponseWriter, r *http.Request) {

	handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		siw.Handler.GetReadiness(w, r)
	}))

	for _, middleware := range siw.HandlerMiddlewares {
		handler = middleware(handler)
	}

	handler.ServeHTTP(w, r)
}

type UnescapedCookieParamError struct {
	ParamName string
	Err       error
}

func (e *UnescapedCookieParamError) Error() string {
	return fmt.Sprintf("error unescaping cookie parameter '%s'", e.ParamName)
}

func (e *UnescapedCookieParamError) Unwrap() error {
	return e.Err
}

type UnmarshalingParamError struct {
	ParamName string
	Err       error
}

func (e *UnmarshalingParamError) Error() string {
	return fmt.Sprintf("Error unmarshaling parameter %s as JSON: %s", e.ParamName, e.Err.Error())
}

func (e *UnmarshalingParamError) Unwrap() error {
	return e.Err
}

type RequiredParamError struct {
	ParamName string
}

func (e *RequiredParamError) Error() string {
	return fmt.Sprintf("Query argument %s is required, but not found", e.ParamName)
}

type RequiredHeaderError struct {
	ParamName string
	Err       error
}

func (e *RequiredHeaderError) Error() string {
	return fmt.Sprintf("Header parameter %s is required, but not found", e.ParamName)
}

func (e *RequiredHeaderError) Unwrap() error {
	return e.Err
}

type InvalidParamFormatError struct {
	ParamName string
	Err       error
}

func (e *InvalidParamFormatError) Error() string {
	return fmt.Sprintf("Invalid format for parameter %s: %s", e.ParamName, e.Err.Error())
}

func (e *InvalidParamFormatError) Unwrap() error {
	return e.Err
}

type TooManyValuesForParamError struct {
	ParamName string
	Count     int
}

func (e *TooManyValuesForParamError) Error() string {
	return fmt.Sprintf("Expected one value for %s, got %d", e.ParamName, e.Count)
}

// Handler creates http.Handler with routing matching OpenAPI spec.
func Handler(si ServerInterface) http.Handler {
	return HandlerWithOptions(si, ChiServerOptions{})
}

type ChiServerOptions struct {
	BaseURL          string
	BaseRouter       chi.Router
	Middlewares      []MiddlewareFunc
	ErrorHandlerFunc func(w http.ResponseWriter, r *http.Request, err error)
}

// HandlerFromMux creates http.Handler with routing matching OpenAPI spec based on the provided mux.
func HandlerFromMux(si ServerInterface, r chi.Router) http.Handler {
	return HandlerWithOptions(si, ChiServerOptions{
		BaseRouter: r,
	})
}

func HandlerFromMuxWithBaseURL(si ServerInterface, r chi.Router, baseURL string) http.Handler {
	return HandlerWithOptions(si, ChiServerOptions{
		BaseURL:    baseURL,
		BaseRouter: r,
	})
}

// HandlerWithOptions creates http.Handler with additional options
func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handler {
	r := options.BaseRouter

	if r == nil {
		r = chi.NewRouter()
	}
	if options.ErrorHandlerFunc == nil {
		options.ErrorHandlerFunc = func(w http.ResponseWriter, r *http.Request, err error) {
			http.Error(w, err.Error(), http.StatusBadRequest)
		}
	}
	wrapper := ServerInterfaceWrapper{
		Handler:            si,
		HandlerMiddlewares: options.Middlewares,
		ErrorHandlerFunc:   options.ErrorHandlerFunc,
	}

	r.Group(func(r chi.Router) {
		r.Get(options.BaseURL+"/health/live", wrapper.GetLiveness)
	})
	r.Group(func(r chi.Router) {
		r.Get(options.BaseURL+"/health/ready", wrapper.GetReadiness)
	})

	return r
}
