Skip to main content

Knockouts & Eligibility

Knockouts prevent ineligible customers from proceeding through the quote flow. They're enforced at two layers: client-side (before API calls) and server-side (from Safeco API responses).

Client-Side Knockouts

Checked in the portal before submitting to the API. Navigates to /carriers/safeco/auto/knockout immediately.

Driver Knockouts

ConditionField
License suspendeddriver.licenseStatus === 'suspended'
License revokeddriver.licenseStatus === 'revoked'

Vehicle Knockouts

ConditionField
Delivery usevehicle.use === 'delivery' or empty string
Commercial/business usevehicle.use === 'commercial' or 'business'

Policy Knockouts

ConditionField
Delivery use flagpolicy.deliveryUse === true
Commercial use flagpolicy.commercialUse === true
License suspended (policy-level)policy.licenseSuspended === true
Insurance previously canceledpolicy.insuranceCanceled === true

Source: apps/fastlane-portal/src/app/pages/carriers/safeco/auto/knockout-validations.ts

Server-Side Knockouts

Detected from Safeco API responses after rate calls. Checked via checkKnockoutResponse().

Knockout Types

TypeTriggerMeaning
declinedMsgStatusCd === 'Rejected'Safeco declined the risk
errorMsgStatusCd === 'Error'Safeco returned an error
pendingZero premium returnedQuote came back with $0 premium (likely data issue)

Zero Premium Detection

A quote is considered zero-premium when com__safeco_QuoteRq_PremiumTotal === 0 or the FullTermAmt across all vehicles sums to zero. This typically indicates Safeco couldn't rate the risk but didn't explicitly reject it.

Extended Status Codes

When Safeco rejects a quote, the response includes ExtendedStatus entries with detail:

ExtendedStatusCdMeaning
QuoteKickoutRisk doesn't meet underwriting guidelines
FieldErrorMissing or invalid field in the request
DataErrorLegacy CRN error pattern

The ExtendedStatusDesc field contains human-readable details shown on the knockout page.

Source: apps/fastlane-portal/src/app/pages/carriers/safeco/auto/knockout-utils.ts

Knockout Page

The knockout page (knockout.tsx) displays:

  • The knockout type (declined, error, or pending)
  • Reasons extracted from the API response
  • A "Talk with Agent" option for assistance
  • A "Return to DA" link to go back to the quoting tool

Custom Error Class

class KnockoutError extends Error {
type: 'generic' | 'declined' | 'error' | 'pending';
reasons: string[];
}

Flow Integration

Knockout checks happen at multiple points:

StepCheck TypeWhen
Drivers ConfirmClient-sideBefore proceeding (license status)
Vehicles ConfirmClient-sideBefore proceeding (vehicle use)
Policy CoveragesServer-sideAfter initial quote response
DiscountsServer-sideAfter update quote response
SummaryServer-sideAfter rate-with-reports response