Instant Advance
Instant Advance is a one-off cash advance against projected marketplace revenue, disbursed as a lump sum and repaid from receipts. It predates the Advance Line and the two are mutually exclusive in the UI.
State
Slice |
|
Actions |
|
The slice implements a read-through cache: loadInstantAdvance chooses between
loadCacheInstantAdvance (serve the store copy) and loadHttpInstantAdvance
(fetch). resetCacheInstantAdvance invalidates it after a mutation.
On the user object:
|
An |
|
The supplier has held an Instant Advance at some point. |
|
The Instant Advance contract is signed — this also governs whether an Advance Line draw needs DocuSign. |
Mutual exclusion with the Advance Line
const hasValidActiveAdvance =
status.activeInstantAdvance &&
(!status.advanceLine || status.advanceLine?.type === AdvanceLineModeEnum.Legacy);
const hasValidPendingAdvance =
status.advanceLine?.type === AdvanceLineModeEnum.Legacy &&
status.advanceLine?.status === AdvanceLineStatusEnum.Pending;
|
The Instant Advance widget only renders when the supplier has no Advance Line at all, or a legacy one. A supplier migrated to the modern Advance Line never sees it, even with an active Instant Advance — the Advance Line widget is the single product surface in that case. |
Permissions
| Permission | Condition |
|---|---|
|
|
|
|
|
|
REPORTS.VIEW_INSTANT_ADVANCE_REPORT_MVP_ELEMENT exists in the permission tree
for element-level gating inside the MVP report but is not granted by
PermissionsService.
Acceptance
DocusignFlowEnum.InstantAdvanceActive. On return with signing_complete:
this.docusignService.confirmAdvanceLineDocuSignRequest(supplierKey, { event }).pipe(
map(() => {
this.permissionService.removePermission('INSTANT_ADVANCE_PENDING');
this.store.dispatch(userStatusUpdateRequested());
this.messageModalService.openSuccessModal({
title: this.translateService.instant('MODALS.INSTANT_ADVANCE.SUCCESS.TITLE'),
description: this.translateService.instant('MODALS.INSTANT_ADVANCE.SUCCESS.CONTENT'),
});
return true;
}),
);
|
This is the same |
INSTANT_ADVANCE_PENDING is passed as a bare name to removePermission, unlike
the Advance Line’s dotted ADVANCE_LINE.ADVANCE_LINE_PENDING_ACTIVATION — it is
a top-level node in permissions.const.ts, so that is correct.
Repayment
Slice |
|
Actions |
|
Repayment progress is rendered in instant-advance-widget and in the Instant
Advance report, using ProgressBarCellRendererComponent for per-row progress.
UI surface
| Component | Role |
|---|---|
|
Dashboard card — active advance and repayment progress. |
|
Full terms — amount, fees, schedule. |
|
Task wrapper for the details modal inside a flow. |
|
Offer presentation during onboarding. |
|
|
The report model InstantAdvanceReport lives at
views/pages/reports/instant-advance-report-page-2/report/instant-advance-report.model.ts
and is also used by Status.activeInstantAdvance — a report model doubling as a
status type.
Cross-sell
Suppliers without an Instant Advance may see a cross-sell CTA on the Product Offerings page, tracked as:
CrossSellEventType.ClickedInstantAdvanceCrossSellAppliedOnProductOfferings
= 'Instant Advance on Product Cross-Sell Page Applied';
The product_cross_sell_page dashboard notification drives that page — see
Dashboard Notifications & CTAs.
Analytics
| Constant | Segment event |
|---|---|
|
|
|
|