User Cost Attribution
We now calculate license costs based on the specific duration of assignment. Instead of monthly snapshots, the system tracks when a license is assigned and revoked, providing precise, time-weighted cost reporting for each user. The user-apps report now reflects actual spend per seat, accounting for mid-cycle additions and removals.

License Events
We have overhauled the license event tracking system to provide a more reliable audit trail for seat lifecycle actions. This includes a new management view and a normalized data schema.
License Events Table: A new dedicated table in the management console for reviewing historical license assignments, revocations, and status changes.

Functional Updates
User Management
User Wizard: Unified flow for simultaneous user creation and platform access assignment.
Access Filter: Added a "No Access Users" toggle to the user list to filter out identities without active platform permissions.
Default Sorting: All user management views now sort by name by default.
Notification Scoping: Subscription options are now restricted based on the user's specific platform access permissions.
Cost Optimization
Integrated insights now flag "Inactive Users with Licenses" based on assignment duration and activity data.
Dashboard & Reporting
Date Range Filtering: The Total Spendings widget now supports custom date ranges for historical auditing.
Spend Summary: Added a total spendings summary to the reporting interface for quick reconciliation.
Performance & Infrastructure
Spending Snapshots: Implemented pre-computed aggregates for spending data to reduce query latency.
Database Optimization: Added composite indexes for license events and user-app reports.
Cache Management: Refined action caching and license cache invalidation logic.
Breaking Changes (API & Schema)
LicenseEvent Schema:
performedByUserIdrenamed toactorId.subjectUserIdrenamed tosubjectId.performedBycolumn removed (useactor.emailrelation instead).
Numeric Data: change and changePercent fields in reporting APIs are now cast to floats for improved precision.
Questions?
If you have any questions, please reach out to me at danish.shakeel@seatbase.io
