ebarimt_pos_sdk package

Subpackages

Submodules

ebarimt_pos_sdk.client module

ebarimt_pos_sdk.errors module

Ebarimt Pos API sdk errors.

exception ebarimt_pos_sdk.errors.PosApiBusinessError(message: str, *, status: str | None = None, code: str | int | None = None, request: Request | None = None, response: Response | None = None)[source]

Bases: PosApiError

2xx HTTP but domain-level failure indicated by payload fields (e.g. {"status":"ERROR", "message":"..."}).

exception ebarimt_pos_sdk.errors.PosApiDecodeError(message: str, *, request: Request | None = None, response: Response | None = None, cause: Exception | None = None)[source]

Bases: PosApiError

Response body was not valid JSON when JSON was expected.

exception ebarimt_pos_sdk.errors.PosApiError(message: str, *, request: Request | None = None, response: Response | None = None, cause: Exception | None = None)[source]

Bases: Exception

Base error for the SDK.

exception ebarimt_pos_sdk.errors.PosApiHttpError(*, status: str | int | None = None, message: str, date: datetime | None = None, request: Request, response: Response, cause: Exception | None = None)[source]

Bases: PosApiError

Non-2xx response from server.

exception ebarimt_pos_sdk.errors.PosApiTransportError(message: str, *, request: Request | None = None, response: Response | None = None, cause: Exception | None = None)[source]

Bases: PosApiError

Network / timeout / DNS / TLS errors.

exception ebarimt_pos_sdk.errors.PosApiValidationError(*, stage: Literal['request', 'response'], model: type | str, validation_error: ValidationError, request: Request | None = None, response: Response | None = None)[source]

Bases: PosApiError

Pydantic validation errors (request or response).

property errors: list

Return Pydantic-style validation errors.

ebarimt_pos_sdk.settings module

Settings for Ebarimt clients.

class ebarimt_pos_sdk.settings.ApiClientSettings(base_url: str, timeout_s: float = 10.0, verify_tls: bool = True, headers: HeaderTypes | None = None, retry: RetrySettings = <factory>, *, token_url: str | None = None, refresh_url: str | None = None, client_id: str | None = None, client_secret: str | None = None, username: str | None = None, password: str | None = None, scope: str | None = None, skew_seconds: float = 30)[source]

Bases: BaseSettings

Settings for API client.

The public ebarimt info endpoints (district codes, TIN info, merchant info, product tax codes, BÜNA classification) do not require auth, so every credential field below is optional. They remain for forward compatibility with endpoints that may require OAuth2 in the future.

client_id: str | None = None
client_secret: str | None = None
property normalized_refresh_url: str | None
property normalized_token_url: str | None
password: str | None = None
refresh_url: str | None = None
scope: str | None = None
skew_seconds: float = 30
token_url: str | None = None
username: str | None = None
class ebarimt_pos_sdk.settings.RestClientSettings(base_url: str, timeout_s: float = 10.0, verify_tls: bool = True, headers: HeaderTypes | None = None, retry: RetrySettings = <factory>)[source]

Bases: BaseSettings

Settings for REST client.

class ebarimt_pos_sdk.settings.RetrySettings(*, max_retries: int = 3, retryable_statuses: frozenset[int] = <factory>, backoff_base_seconds: float = 1.0)[source]

Bases: object

Configuration for transport retry behaviour.

backoff_base_seconds: float = 1.0
max_retries: int = 3
retryable_statuses: frozenset[int]
sleep_seconds(attempt: int) float[source]

Return the sleep duration before the next retry (exponential backoff).

Module contents

class ebarimt_pos_sdk.ApiClientSettings(base_url: str, timeout_s: float = 10.0, verify_tls: bool = True, headers: HeaderTypes | None = None, retry: RetrySettings = <factory>, *, token_url: str | None = None, refresh_url: str | None = None, client_id: str | None = None, client_secret: str | None = None, username: str | None = None, password: str | None = None, scope: str | None = None, skew_seconds: float = 30)[source]

Bases: BaseSettings

Settings for API client.

The public ebarimt info endpoints (district codes, TIN info, merchant info, product tax codes, BÜNA classification) do not require auth, so every credential field below is optional. They remain for forward compatibility with endpoints that may require OAuth2 in the future.

client_id: str | None = None
client_secret: str | None = None
property normalized_refresh_url: str | None
property normalized_token_url: str | None
password: str | None = None
refresh_url: str | None = None
scope: str | None = None
skew_seconds: float = 30
token_url: str | None = None
username: str | None = None
class ebarimt_pos_sdk.BarCodeType(*values)[source]

Bases: str, Enum

Barcode standard used to identify the item.

GS1 = 'GS1'
ISBN = 'ISBN'
UNDEFINED = 'UNDEFINED'
class ebarimt_pos_sdk.CreateReceiptRequest(*, branchNo: str, totalAmount: Decimal | int | float, merchantTin: str, posNo: str, type: ReceiptType | Literal['B2C_RECEIPT', 'B2B_RECEIPT', 'B2C_INVOICE', 'B2B_INVOICE'], totalVAT: Decimal | int | float | None = None, totalCityTax: Decimal | int | float | None = None, districtCode: str | None = None, customerTin: str | None = None, consumerNo: str | None = None, inactiveId: str | None = None, invoiceId: str | None = None, reportMonth: str | None = None, data: dict[str, Any] | None = None, payments: list[Payment] | None = None, billIdSuffix: str, receipts: list[SubReceipt])[source]

Bases: _CreateReceiptBase

Request payload for creating a new receipt.

bill_id_suffix: str
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

receipts: list[SubReceipt]
class ebarimt_pos_sdk.CreateReceiptResponse(*, branchNo: str, totalAmount: Decimal | int | float, merchantTin: str, posNo: str, type: ReceiptType | Literal['B2C_RECEIPT', 'B2B_RECEIPT', 'B2C_INVOICE', 'B2B_INVOICE'], totalVAT: Decimal | int | float | None = None, totalCityTax: Decimal | int | float | None = None, districtCode: str | None = None, customerTin: str | None = None, consumerNo: str | None = None, inactiveId: str | None = None, invoiceId: str | None = None, reportMonth: str | None = None, data: dict[str, Any] | None = None, payments: list[Payment] | None = None, id: str, version: str, posId: int, status: ReceiptCreateStatus | Literal['SUCCESS', 'ERROR', 'PAYMENT'], qrData: str, lottery: str, date: datetime, easy: bool, receipts: list[SubReceiptResponse])[source]

Bases: _CreateReceiptBase

Response returned after receipt creation.

date: datetime
easy: bool
id: str
lottery: str
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

classmethod parse_date(v: str | datetime) datetime[source]
pos_id: int
qr_data: str
receipts: list[SubReceiptResponse]
status: _ReceiptCreateStatus
version: str
class ebarimt_pos_sdk.DeleteReceiptRequest(*, id: str, date: datetime | None = None)[source]

Bases: BaseEbarimtModel

Request payload for deleting an existing receipt.

date: datetime | None
id: str
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

serialize_date(value: datetime | None) str | None[source]
class ebarimt_pos_sdk.EbarimtApiClient(settings: ApiClientSettings, *, sync_client: Client | None = None, async_client: AsyncClient | None = None, headers: Headers | Mapping[str, str] | Mapping[bytes, bytes] | Sequence[tuple[str, str]] | Sequence[tuple[bytes, bytes]] | None = None)[source]

Bases: EbarimtBaseClient

class ebarimt_pos_sdk.EbarimtRestClient(settings: RestClientSettings, *, sync_client: Client | None = None, async_client: AsyncClient | None = None, headers: Headers | Mapping[str, str] | Mapping[bytes, bytes] | Sequence[tuple[str, str]] | Sequence[tuple[bytes, bytes]] | None = None)[source]

Bases: EbarimtBaseClient

Ebarimt REST api client.

class ebarimt_pos_sdk.Environment(*values)[source]

Bases: Enum

PRODUCTION = 1
STAGING = 2
class ebarimt_pos_sdk.Item(*, name: str, measureUnit: str, qty: Decimal | int | float, unitPrice: Decimal | int | float, totalAmount: Decimal | int | float, barCode: str | None = None, barCodeType: BarCodeType | Literal['UNDEFINED', 'GS1', 'ISBN'] | None = None, classificationCode: str | None = None, taxProductCode: str | None = None, totalVAT: Decimal | int | float | None = None, totalCityTax: Decimal | int | float | None = None, data: ReceiptItemData | None = None)[source]

Bases: BaseEbarimtModel

Single product or service included in a receipt.

bar_code: str | None
bar_code_type: _BarCodeType | None
classification_code: str | None
data: ReceiptItemData | None
measure_unit: str
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
qty: Number
tax_product_code: str | None
total_amount: Number
total_city_tax: Number | None
total_vat: Number | None
unit_price: Number
classmethod validate_positive(v: Decimal | int | float) Decimal | int | float[source]
class ebarimt_pos_sdk.Payment(*, code: PaymentCode | Literal['CASH', 'PAYMENT_CARD'], status: PaymentStatus | Literal['PAID', 'PAY', 'REVERSED', 'ERROR'], paidAmount: Decimal | int | float, exchangeCode: str | None = None, data: PaymentCardData | None = None)[source]

Bases: BaseEbarimtModel

Payment information associated with a receipt.

code: _PaymentCode
data: PaymentCardData | None
exchange_code: str | None
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

paid_amount: Number
status: _PaymentStatus
class ebarimt_pos_sdk.PaymentCardData(*, terminalID: str, rrn: str, maskedCardNumber: str, easy: bool, bankCode: str | None = None)[source]

Bases: BaseEbarimtModel

Card payment metadata when using PAYMENT_CARD.

bank_code: str | None
easy: bool
masked_card_number: str
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

rrn: str
terminal_id: str
class ebarimt_pos_sdk.PaymentCode(*values)[source]

Bases: str, Enum

Payment method used for the transaction.

CASH = 'CASH'
PAYMENT_CARD = 'PAYMENT_CARD'
class ebarimt_pos_sdk.PaymentStatus(*values)[source]

Bases: str, Enum

Current status of the payment.

ERROR = 'ERROR'
PAID = 'PAID'
PAY = 'PAY'
REVERSED = 'REVERSED'
exception ebarimt_pos_sdk.PosApiBusinessError(message: str, *, status: str | None = None, code: str | int | None = None, request: Request | None = None, response: Response | None = None)[source]

Bases: PosApiError

2xx HTTP but domain-level failure indicated by payload fields (e.g. {"status":"ERROR", "message":"..."}).

exception ebarimt_pos_sdk.PosApiDecodeError(message: str, *, request: Request | None = None, response: Response | None = None, cause: Exception | None = None)[source]

Bases: PosApiError

Response body was not valid JSON when JSON was expected.

exception ebarimt_pos_sdk.PosApiError(message: str, *, request: Request | None = None, response: Response | None = None, cause: Exception | None = None)[source]

Bases: Exception

Base error for the SDK.

exception ebarimt_pos_sdk.PosApiHttpError(*, status: str | int | None = None, message: str, date: datetime | None = None, request: Request, response: Response, cause: Exception | None = None)[source]

Bases: PosApiError

Non-2xx response from server.

exception ebarimt_pos_sdk.PosApiTransportError(message: str, *, request: Request | None = None, response: Response | None = None, cause: Exception | None = None)[source]

Bases: PosApiError

Network / timeout / DNS / TLS errors.

exception ebarimt_pos_sdk.PosApiValidationError(*, stage: Literal['request', 'response'], model: type | str, validation_error: ValidationError, request: Request | None = None, response: Response | None = None)[source]

Bases: PosApiError

Pydantic validation errors (request or response).

property errors: list

Return Pydantic-style validation errors.

class ebarimt_pos_sdk.ReceiptCreateStatus(*values)[source]

Bases: str, Enum

Result status returned after creating a receipt.

ERROR = 'ERROR'
PAYMENT = 'PAYMENT'
SUCCESS = 'SUCCESS'
class ebarimt_pos_sdk.ReceiptItemData(*, lotNo: str | None = None, stockQR: list[str] | None = None)[source]

Bases: BaseEbarimtModel

items[].data Note: docs show lotNo + stockQR, but examples also show nested "data": {"stockQR":[...]} sometimes. This model follows the schema: lotNo, stockQR directly under data.

lotNo: str | None
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

stockQR: list[str] | None
class ebarimt_pos_sdk.ReceiptType(*values)[source]

Bases: str, Enum

Type of receipt or invoice issued to consumer or business.

B2B_INVOICE = 'B2B_INVOICE'
B2B_RECEIPT = 'B2B_RECEIPT'
B2C_INVOICE = 'B2C_INVOICE'
B2C_RECEIPT = 'B2C_RECEIPT'
class ebarimt_pos_sdk.RestClientSettings(base_url: str, timeout_s: float = 10.0, verify_tls: bool = True, headers: HeaderTypes | None = None, retry: RetrySettings = <factory>)[source]

Bases: BaseSettings

Settings for REST client.

class ebarimt_pos_sdk.SubReceipt(*, totalAmount: Decimal | int | float, taxType: TaxType | Literal['VAT_ABLE', 'VAT_FREE', 'VAT_ZERO', 'NOT_VAT'], merchantTin: str, items: list[Item], totalVAT: Decimal | int | float | None = None, totalCityTax: Decimal | int | float | None = None, customerTin: str | None = None, bankAccountNo: str | None = None, iBan: str | None = None, invoiceId: str | None = None, data: dict[str, Any] | None = None)[source]

Bases: BaseEbarimtModel

Sub-receipt containing items, tax info, and seller details.

bank_account_no: str | None
customer_tin: str | None
data: dict[str, Any] | None
iban: str | None
invoice_id: str | None
items: list[Item]
merchant_tin: str
model_config = {'alias_generator': <function alias_generator>, 'extra': 'ignore', 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

tax_type: _TaxType
total_amount: Number
total_city_tax: Number | None
total_vat: Number | None
classmethod validate_items_not_empty(v: list[Item]) list[Item][source]
class ebarimt_pos_sdk.TaxType(*values)[source]

Bases: str, Enum

VAT applicability of the receipt items.

NO_VAT = 'NO_VAT'
VAT_ABLE = 'VAT_ABLE'
VAT_FREE = 'VAT_FREE'
VAT_ZERO = 'VAT_ZERO'
ebarimt_pos_sdk.create_api_settings(env: Environment, *, client_id: str | None = None, username: str | None = None, password: str | None = None, client_secret: str | None = None, scope: str | None = None, timeout_s: float = 10.0, verify_tls: bool = True, headers: Headers | Mapping[str, str] | Mapping[bytes, bytes] | Sequence[tuple[str, str]] | Sequence[tuple[bytes, bytes]] | None = None, skew_seconds: float = 30) ApiClientSettings[source]

Ebarimt api settings factory.

The public ebarimt info endpoints don't require OAuth2, so credentials are optional. They are preserved for forward-compat with any endpoint that may later require token auth.