Skip to content

July 31, 2026 — Backend

Release date: Friday, July 31, 2026

Summary

This week adds tender management end-to-end, Geonorge address lookup for building forms, and a major coverage portfolio upgrade: drift detection for outdated ACTIVE-year lines, bulk reissue and mid-term expire, future-start coverage with prorated premiums, and cleaner list responses without server-side aggregates.

Shipped

  • Tender management — new module with CRUD, building assignments, supplier activity, documents, reinsurers, permissions, audit actions, and Prisma schema/migration.
  • Geonorge address registry searchGET /api/v1/address-registry/search for building address autocomplete with postal code, municipality, and coordinates.
  • Coverage drift detection — ACTIVE-year issued lines compared against current rating inputs; isOutdated flag, snapshot persistence, and list filter support.
  • Bulk coverage reissue — portfolio reissue for ACTIVE-year lines; each line must declare isOutdated; projected-renewal copy and shouldRenew honored on reissue.
  • Bulk coverage expire — mid-term expiry for selected portfolio lines; voids projected renewal children on expire.
  • Future-start coverage — coverage lines may start in the future; partial-year issue premiums prorated from start date.
  • Coverage list API cleanup — server-side aggregate totals removed from list response (clients derive totals from returned rows).

Engineering (commit recap)

Backend — week of July 27 – August 2, 2026

Window: after 2026-07-24, before 2026-08-01 (--no-merges).

Summary

The largest addition is the tender module: Prisma models, permissions, audit events, and REST surface for tenders, buildings, reinsurers, documents, and supplier activity. Insurance coverage work spans drift detection (rating-input snapshots and isOutdated), bulk reissue/expire for ACTIVE-year portfolios, future-start dates with prorated premiums, and removal of list-response aggregates. Building address forms gain Geonorge registry search. OpenAPI contract regenerated throughout.

Themes

  • Tender module: New tender.prisma schema, migration, permissions/role seeds, TenderService with building seed util, controllers for tenders and reinsurers, DTOs, audit action types, and docs/TENDER.md.
  • Coverage drift: CoverageDriftService and logic compare issued lines to current building/rating inputs; CoverageRatingInputsSnapshot builder; isOutdated on list items; outdatedOnly query filter; Prisma migration for snapshot storage.
  • Bulk portfolio operations: bulkReissueCoverages and bulkExpireCoverages on insurance-year controller; reissue requires isOutdated per line; expiry persistence and projected-renewal void/sync on expire; shared projected-copy util with renewal service.
  • Coverage period and premiums: Future startDate allowed; coverage-period.validation and reissue logic prorate partial-year issue premiums; building-on-risk validation extended.
  • List API shape: Removed server-computed aggregates from GET coverage-lines-for-year response; drift fields remain on list items.
  • Geonorge address search: GeonorgeAddressService and AddressRegistryController with search query/result DTOs; wired into building module.
  • OpenAPI contract: Regenerated for tender endpoints, coverage bulk/drift APIs, address registry search, and TablePreferenceDto export.

Notable fixes or risks (if any)

  • Bulk reissue guard — backend rejects lines without isOutdated: true; frontend must send the flag explicitly.
  • Mid-term expire side effects — expiring a line voids its projected renewal children; confirm portfolio renewal views reflect voided projections.
  • List aggregates removed — clients that relied on server-side totals must compute from row data (frontend now does this in-table).
  • Geonorge dependency — address search calls the external Geonorge API; monitor availability and rate limits in production.