Underwriting tracker
What it is
A queue view of underwriting work across all suppliers, as opposed to the per-supplier underwriting tabs. It answers "what needs underwriting attention" rather than "what is the state of this supplier".
Where it lives
| Concern | Location |
|---|---|
Route |
|
Module |
|
Component |
|
Feature flag |
|
It is entirely EVA
This is the clearest example of the micro-front-end seam in the codebase. The component has no logic at all:
@Component({
selector: 'app-tracker',
templateUrl: './tracker.component.html',
styleUrls: ['./tracker.component.scss'],
})
export class TrackerComponent {}
<div class="underwriting-tracker__container">
<app-eva [url]="'underwriting-tracker'"></app-eva>
</div>
Everything a user sees — the grid, the filters, the actions — is served by EVA at
${evaApiUrl}underwriting-tracker, inside an iframe.
What Internal Admin still provides:
-
Routing — the URL, and the route guards (
RouteAccessResolver,FeatureFlagsGeneralGuard,NgxPermissionsGuard). -
Authentication —
EvaComponentreadslocalStorage['currentUser']and hands the JWT toEvaService, which either sets a shared-domain cookie or, onlocalhost, appends?auth=<token>to the iframe URL. -
Authorisation context —
EvaComponentresolves the user’s sub-permissions viaUsersService.getPermissionSubPerms(permCode)and sends them to EVA as part of the config message. -
Feature flags —
FeatureFlagsEvaServicecomputes EVA’s flag set and pushes it overpostMessage. -
Chrome — the sidebar, layout, toasts and iframe resizing.
See iframe messaging and EVA for the protocol.
|
Bugs reported against "the UW tracker" are usually EVA bugs, not bugs in this repository. Before investigating here, establish whether the problem is in the iframe content (EVA) or in what this app passes to it (token, permissions, flags, size). |
Access
| Gate | Detail |
|---|---|
Feature flag |
|
Permissions |
Route denies |
Sub-permissions |
Passed through to EVA rather than enforced here — EVA decides what to show. |
Note the flag gates visibility, not the route: /underwriting/tracker uses
FeatureFlagsGeneralGuard (which always resolves true) rather than
FeatureFlagGuard (which redirects to /404 when a flag is off). With the flag off the
menu item disappears but the URL still renders — and the iframe will load whatever EVA
serves.
Relationship to per-supplier underwriting
| Surface | Scope |
|---|---|
|
Cross-supplier queue. EVA-rendered. This page. |
|
One supplier’s assessment. Angular-rendered in this repository. See underwriting. |
|
A flag-gated Angular rewrite of the per-supplier view
( |
The underwriting/ module in this repository contains only the tracker. All
per-supplier underwriting code lives under
suppliers/supplier/supplier-underwriting/ — a naming trap worth remembering.
Other EVA-rendered surfaces
The tracker is not unique. EvaComponent is also used for:
-
The supplier top bar (
EVA_IFRAME_SELECTOR.TOP_BAR) and the supplier menu (EVA_SUPPLIER_MENUflag). -
The onboarding summary (
EVA_ONBOARDING_SUMMARYflag). -
Contract views (which can request a parent refresh via
CONTRACTS__REFRESH). -
The DEV Admin feature-flag and QA screens, which embed EVA in order to read and write EVA’s own flags — see DEV Admin.
Gotchas
-
The component is empty by design — do not look for tracker logic here.
-
app-evatakes a relativeurl('underwriting-tracker'), resolved againstevaApiUrl. -
EvaComponentclears the EVA auth cookie onwindow:unloadandwindow:beforeunload, so a hard refresh re-issues the token. -
On
localhostthe token travels in the query string instead of a cookie, because the parent domain differs. Behaviour therefore differs between local and deployed environments. -
The flag hides the menu entry but does not block the route.