furkankadioglu/efatura
Laravel package for Turkish e-Fatura integration. Create, sign, and send UBL-TR electronic invoices to the GİB portal through a simple, fluent API, with easy configuration and XML output for PHP applications.
Architecture fit. The package presents as a Laravel-style integration layer (service provider + config + facade) for Turkish e-invoice/e-archive workflows, with the 1.9.4 notes confirming two distinct capability areas: an SMS-based approval/verification flow and invoice querying for documents issued in the taxpayer's name ("adımıza düzenlenen faturalar," i.e. incoming e-Fatura). That makes it a fit for conventional Laravel monoliths where a single application both issues and reconciles invoices. It is a poor fit for polyglot or event-driven estates unless the core is framework-agnostic and can be wrapped behind our own anti-corruption layer — nothing in the release notes indicates that.
Integration feasibility. High for Laravel 8–11 applications already holding GİB/provider credentials. The 1.9.4 changes are additive or corrective, not structural: an SMS approval fix, a manual test-account override, and a new invoice query method. The last two are the meaningful ones — the query capability turns a write-only integration into a read path, which is where most ERP/finance reconciliation value sits, but also where data-handling scope expands.
Technical risk. Semver risk is low (patch release, no breaking-change or deprecation markers). The residual risks are environmental, not code-level:
.env can route production invoicing to a test account or vice versa — a legal/regulatory problem in Turkey, not merely a bug.Key questions. Which provider/GİB integration does this wrap, and what is its stated support and deprecation policy? What Laravel/PHP versions are in the composer constraint matrix? Is the test-account override env-gated, and can it be made environment-derived rather than manually settable? Does the invoice query support date ranges, pagination, and incremental cursors, or is it a full-scan call? Are inbound SMS callbacks signature-verified? What is the license, and is there a published test suite and changelog beyond these three lines?
Stack fit. Requires PHP 8.x, outbound HTTPS to the provider and SMS gateway, queue workers for OTP dispatch and verification retries, and the scheduler for invoice polling. No exotic runtime dependencies are implied. Storage should be provisioned for retrieved invoice XML/PDF if the query feature returns document artefacts.
Migration path. Treat 1.9.4 as a drop-in composer update from any 1.9.x. Validate whether the SMS fix alters any public method signatures or exception classes before merging — patch releases sometimes ship behavioural changes without calling them out. Confirm no new migrations are required (none are signalled). Adopt the two new features deliberately rather than by default: gate the test-account override behind an explicit non-production check in our own config layer, and land invoice querying behind a feature flag with read-only credentials first.
Compatibility. Verify the composer constraints against our Laravel and Guzzle versions, and confirm the SMS fix is compatible with whichever gateway account we already hold. If we run multi-tenant, confirm the package supports per-tenant credentials rather than a single global config; the notes are silent, and this is often the blocker in Turkish ERP integrations.
Sequencing. (1) Update in staging and run an end-to-end SMS approval against the provider sandbox, including timeout, wrong-code, and gateway-down paths. (2) Add a hard environment assertion so the test-account override cannot activate in production. (3) Enable invoice querying in read-only mode as a scheduled job with an incremental cursor, and reconcile a sample against the GİB portal manually. (4) Only then expose the query results in any user-facing finance view. (5) Production rollout with alerting on approval failure rate and query job staleness.
Maintenance. The package itself should be low-touch, but the surrounding surface is not: Turkish e-invoicing is a regulated, moving target (GİB schema revisions, e-Fatura/e-Arşiv threshold changes, UBL-TR updates), and provider API contracts drift independently of this package's release cadence. Budget a standing allocation for quarterly compatibility review regardless of whether the package ships.
Support. Release notes are Turkish-only, which suggests a Turkish-speaking maintainer and likely a consultancy-backed or community support model. There is no evidence of an SLA. We should own the provider relationship directly and treat the package as a thin adapter, not as our support channel. Identify an internal owner who reads Turkish and understands GİB terminology.
Scaling. Cost scales with OTP volume, not with compute — SMS is a per-message operating expense that grows linearly with invoice volume and must be modelled in unit economics. Invoice querying scales with polling frequency and page size; unbounded polling against a provider API will hit rate limits and inflate latency. Use incremental cursors, off-peak scheduling, and backoff.
Failure modes. Provider outage blocks issuance and querying; SMS gateway outage blocks approval entirely, so a documented manual-approval fallback is mandatory. Misconfigured test-account override is the highest-severity failure — it can file or suppress documents under the wrong taxpayer identity. Missing idempotency keys risk duplicate invoice submission on retry. Unverified callbacks risk forged approval events. All four should have explicit detection and runbook entries.
Ramp-up. Moderate. A competent Laravel developer can wire the package in days, but productive ownership requires domain grounding in Turkish e-invoicing (e-Fatura vs e-Arşiv, UBL-TR, GİB portal reconciliation) plus SMS flow semantics. Plan one to two sprints for the engineer and a half-day of finance/SME time for reconciliation sign-off before the query feature is trusted.
How can I help you explore Laravel packages today?