lamoda/atol-client
A PHP client for integrating ATOL online cash registers into your application. It handles fiscal receipts, correction documents, and cash register management, with Laravel support for quick setup.
Architecture fit. This is an infrastructure SDK for ATOL fiscal API v3/v4/v5, not a Laravel-native domain package. Its best fit is behind an application-owned FiscalReceiptGateway interface, with the package isolated in an adapter layer. Laravel should own configuration, credential injection, queueing, persistence, retries, and reconciliation; the package should only translate requests/responses to ATOL. Do not let its DTOs, exceptions, or transport details leak into controllers, models, or business services. Fiscalization should be asynchronous and auditable, not a blocking checkout dependency.
Integration feasibility. Composer installation is straightforward, but Laravel integration likely requires manual service-container binding and configuration unless the package ships a service provider. Verify PHP/Laravel compatibility, PSR-18/PSR-7 HTTP client expectations, Guzzle/Symfony serializer dependencies, authentication/token lifecycle, and supported ATOL operations. A sandbox spike is mandatory: credentials, receipt registration, status polling, refunds/corrections, error mapping, and idempotency behavior. The code integration is moderate; compliance and receipt-data correctness are the larger effort.
Technical risk. The package has low adoption at 30 stars and the supplied repository metadata is unknown, so provenance and maintenance require due diligence. A recent 2025 release is positive, but one release does not prove active maintenance. Main risks are ATOL API deprecation, fiscal-compliance changes, auth/token expiry, duplicate fiscal receipts after ambiguous timeouts, weak error semantics, and package abandonment. MIT licensing is permissive and low-risk legally. Pin the version, review release tags/CI/issues/security policy, and be prepared to fork or replace with a thin internal client.
Key questions. Which ATOL API version and contract are in scope? Which operations are needed: receipts, refunds, corrections, status, marking codes? Is the product legally required to use ATOL/54-FZ, and who owns tax/legal validation? Do we have sandbox and production credentials? What PHP/Laravel versions must be supported? Does the client support idempotency keys, token refresh, raw error payloads, and status reconciliation? What is the vendor/package support model and fallback if the package is abandoned? Where will receipt data be stored and for how long?
Stack fit. Use Laravel’s container to bind a configured client singleton, keep credentials in environment/secret storage, and place the package under an infrastructure namespace. Define an application interface such as FiscalReceiptGateway with methods for register/status/refund. Wrap package exceptions into application-level failures. Use a queued FiscalizeReceiptJob with a unique idempotency key and an outbox/audit table. Keep HTTP calls outside database transactions. Add a separate status-polling job and admin/ops visibility.
Migration path. If direct ATOL calls already exist, introduce the adapter behind the existing interface, run shadow comparisons in sandbox, then route traffic by feature flag per receipt type or API version. Keep the old path as fallback until reconciliation is clean. For greenfield work, start in sandbox with one receipt type, then add refunds/corrections and production cutover. API version migration should be configuration-driven so v3/v4/v5 changes stay inside the adapter.
Compatibility. Pin the package version and verify PHP, Laravel, PSR HTTP client, and extension requirements. Confirm the supported ATOL API version matrix and deprecation dates. Add contract tests against sandbox fixtures and mocked responses. Run Composer audit and dependency review. Treat Laravel compatibility as unproven until tested in the target application.
Sequencing.
Maintenance. Assign an internal owner. Monitor ATOL release notes, package releases, PHP/Laravel support, and dependency vulnerabilities. Because community adoption is low, budget for fork/patch capability. Compliance changes may come from ATOL/legal requirements rather than package updates, so maintenance must include business-process review, not just dependency upgrades.
Support. Expect community/GitHub support rather than a commercial SLA from the package. Keep a separate ATOL vendor support contract and an internal runbook for credentials, token failures, rejected receipts, duplicate prevention, and manual reconciliation. Define escalation for fiscal-day failures.
Scaling. Scale with queue workers and rate-limit awareness, not synchronous HTTP calls. Use idempotency keys, exponential backoff, separate queues for fiscal jobs, indexed audit tables, and batched status polling. Track throughput, failure rate, p95 ATOL latency, queue age, and duplicate-prevention hits. Capacity planning should include ATOL rate limits and peak sales periods.
Failure modes. Watch for auth/token expiry, network timeouts, ambiguous successes where ATOL accepted a receipt but the client did not receive the response, duplicate submissions, invalid tax/marking data, API schema changes, version retirement, secret misconfiguration, sandbox/production drift, and queue backlog. Mitigate with outbox/idempotency, reconciliation jobs, dead-letter queues, alerting, replay tooling, and a clear “receipt pending/failed” customer state.
Ramp-up. A Laravel engineer can wire the package in roughly 1–2 days, but production hardening, reconciliation, and compliance validation should be planned at 2–4 weeks depending on receipt types and legal review. TPM should treat this as a protocol adapter to accelerate ATOL connectivity, not as a complete fiscalization system or system of record.
How can I help you explore Laravel packages today?