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

instantAdvance (InstantAdvanceFeatureModule)

Actions

loadInstantAdvance, loadHttpInstantAdvance, loadCacheInstantAdvance, resetCacheInstantAdvance, loadInstantAdvanceSuccess, loadInstantAdvanceFailure

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:

status.activeInstantAdvance

An InstantAdvanceReport for the current advance, or null.

status.hasInstantAdvHistory

The supplier has held an Instant Advance at some point.

status.instantAdvanceSigned

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.INSTANT_ADVANCE_REPORT + REPORTS.INSTANT_ADVANCE_REPORT_MVP

status.hasInstantAdvHistory (granted together)

INSTANT_ADVANCE_REPORT_WIDGET

hasValidActiveAdvance

INSTANT_ADVANCE_PENDING

hasValidPendingAdvance and isUserPendingAndExpedited(user)

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 confirmAdvanceLineDocuSignRequest endpoint the Advance Line uses, but called without the APR flag. The two products share the confirmation API; the flow type in the return URL is what distinguishes them.

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

instantAdvanceRepayment (InstantAdvanceRepaymentModule)

Actions

loadInstantAdvanceRepayments, loadInstantAdvanceRepaymentsSuccess, loadInstantAdvanceRepaymentsError

Repayment progress is rendered in instant-advance-widget and in the Instant Advance report, using ProgressBarCellRendererComponent for per-row progress.

UI surface

Component Role

instant-advance-widget

Dashboard card — active advance and repayment progress.

modals/instant-advance-details-modal/

Full terms — amount, fees, schedule.

tasks/advance-line/open-instant-advance-details.task.ts

Task wrapper for the details modal inside a flow.

views/onboarding/product-offering/instant-advance/

Offer presentation during onboarding.

/reports/instant-advance-report

InstantAdvanceReportPageModule.

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

InstantAdvanceEventTypes.ADVANCE_REPORT_LINK

ClickedOnAdvanceReportLink

InstantAdvanceEventTypes.ADVANCE_REPORT_LINK and AdvanceLineEventTypes.ADVANCE_REPORT_LINK resolve to the same Segment event name, ClickedOnAdvanceReportLink. Segment cannot distinguish which product the click came from.