novosga/reports-bundle
Symfony bundle for Novo SGA that adds report management: define and organize report templates, generate reports from service and attendance data, and export results for operational reporting and analysis.
Architecture fit. novosga/reports-bundle is a Symfony bundle, not a Laravel package. It ships no ServiceProvider, no publishable config, no facade, and its bootstrap path assumes a Symfony Kernel, DI container, and event dispatcher. It is also domain-coupled: Unidade is a NovoSGA concept (an organizational service unit), and Envelope here refers to the mail/message abstraction the bundle populates when emitting reports. That means the package cannot be dropped into a Laravel application as-is — it is consumable only as (a) a component inside a Symfony/NovoSGA service we operate alongside Laravel, or (b) a source of report-generation logic we adapt behind our own boundary. Assessed as a Laravel dependency, fit is poor; assessed as a PHP/Symfony service dependency, fit is good.
Integration feasibility. High if scoped as a sidecar service exposing report endpoints; low as an in-process library. The substantive change in v2.3.0 is correct and valuable: report envelopes now carry the unit's timezone (feat: Unidade timezone → fix: pass unit timezone to Envelope instance). For any multi-region deployment this fixes a real class of defect — reports and their delivery timestamps rendered in server-local time rather than the unit's local time. The remaining items are housekeeping: Symfony 7.1 → 7.4 LTS and dev-tool majors (PHPStan 2, PHPUnit 11, PHPCS 4), plus deprecation cleanup.
Technical risk. Moderate, concentrated in three places:
Envelope. Shipping both together is fine for consumers, but it signals the initial PR lacked a test asserting the envelope actually received the timezone — worth confirming a regression test exists now, since a silent timezone bug is exactly the kind that surfaces as wrong data in a customer-facing report rather than an exception.Key questions.
symfony/* constraint range in composer.json for v2.3.0?Envelope timezone propagation across a DST boundary, not just a fixed offset?Stack fit. PHP 8.2+ with Symfony 7.4. Laravel 11/12 already runs Symfony 7.x components transitively, so component-level version alignment is plausible — but alignment of symfony/* is not the same as bootstrapping a bundle. Do not plan on composer require inside a Laravel app and expecting it to register.
Migration path. Treat v2.2.3 → v2.3.0 as a minor bump with a hard transitive floor. The public API surface appears unchanged (no removals listed), so the practical migration is: bump the constraint, resolve the Symfony 7.4 floor across the graph, fix deprecation warnings surfaced by the new PHPStan rules, then verify report output. If we are on 7.1–7.3 anywhere in the same graph, that upgrade is the real work item, not this bundle.
Compatibility. Two gates: (1) the host application must be able to move to Symfony 7.4 without dragging an incompatible sibling bundle; (2) our static-analysis and test tooling must tolerate PHPStan 2 / PHPUnit 11, or we isolate the package's CI from ours. The timezone feature also implies configuration surface — every Unidade now needs a valid timezone identifier, so check what the fallback is for units with none set.
Sequencing.
composer why-not against the Symfony 7.4 constraint to size the blast radius.Maintenance. Upstream is active and disciplined about chore work — LTS upgrade and deprecation cleanup landed promptly, which is a good signal for a small project. The offsetting concern is concentration: one maintainer authored every PR in this release. We should assume we may need to patch or fork, and budget accordingly. Dev-tool majors increase our cost to keep a fork green.
Support. Symfony 7.4 LTS gives a multi-year security runway, which materially de-risks the dependency for the next planning horizon. That is the strongest argument for taking this release rather than deferring.
Scaling. The change is configuration-driven per unit, not per request — negligible runtime cost, no new I/O, no new external dependency. It scales fine; the scaling question is organizational (how many unit timezones must be curated and kept correct), not technical.
Failure modes.
Ramp-up. Low for a team already running Symfony/NovoSGA; a Laravel-only team will spend real time learning bundle conventions, the NovoSGA Unidade domain, and the envelope abstraction — likely more time than the feature is worth unless they are already operating the service. Recommend the owning team be whoever runs the NovoSGA deployment, not the Laravel application team.
How can I help you explore Laravel packages today?