DecisioQ System Architecture Decision Concepts Decision List API Guide Developer Center Decision Studio Quick Start Playground End-to-End Examples

AUTO-RENT-008 End-to-End Example

Assign Rental Vehicle supports consistent, data-driven Vehicle Rental decisions using reservation, fleet, customer, pricing, eligibility, pickup, return, damage, and incident information.

Automotive Vehicle Rental Vehicle Assignment TOPSIS
IdentityIssue bearer token
CatalogDiscover decision metadata
ProfileSelect weights and scenario
ExecuteRun deterministic ranking
ExplainReview result context

Overview

AUTO-RENT-008, Assign Rental Vehicle, compares candidate rental vehicles using reservation fit, available unit match, prep readiness, rental margin impact, assignment risk, and pickup time pressure.

Decision ID
AUTO-RENT-008
Decision Name
Assign Rental Vehicle
Industry Profile
vehicle-rental-assign-rental-vehicle-auto-rent-008 version 1.0.0
Default Profile
balanced
Runnable Scenario
standard_rental
Catalog
DKR-AUTO-RUNTIME-001, version 13.9.3
API Compatibility
7.4.0 or later catalog execution flow
The deterministic Decision Engine ranks the options. AI explanation text, when returned, is explanatory only and must not choose, rerank, or override the deterministic result.

Understanding This Decision

Assign Rental Vehicle helps a vehicle-rental operation compare available candidate vehicles before assigning one to a reservation. The decision is useful when a branch or rental platform needs a repeatable recommendation that balances customer fit, available unit match, operational readiness, margin impact, risk exposure, and pickup timing pressure.

Business question

Which vehicle should be recommended for assign rental vehicle in the selected Vehicle Rental context?

Expected outcome

A recommended vehicle or ranked set of vehicles with the criteria that most influenced the result.

Typical users

Rental operations managers, branch teams, fleet coordinators, reservation platforms, and integration teams building rental assignment workflows.

Decision boundary

Use this decision to rank supplied candidate vehicles. It does not discover missing vehicles and does not replace rental policy checks, eligibility controls, damage review, or required approvals.

Assumptions: submitted vehicles represent the real options under consideration, criterion values use the units and scales requested by the catalog, and the selected profile and scenario reflect the intended business priorities.

Architecture

  1. Request a token from the Identity service.
  2. Use the returned jwtToken as the bearer token.
  3. Load the catalog and decision detail from DKS.
  4. Build a Prepared Decision Input using canonical criterion IDs.
  5. Execute the decision through DDE.
  6. Use X-Request-Id and X-Correlation-Id for tracing across DDE and DKS.
Token propagation: when DDE needs authoritative decision metadata during execution, it forwards the caller's bearer token to DKS with the request identifiers. This lets the catalog and execution records share the same security and tracing context.

Authentication

Request a secure session token from Identity. The current token response field is jwtToken.

Token request
POST https://identity.vinquery.com/connect/token
Content-Type: application/json

{
  "clientId": "{clientId}",
  "clientSecret": "{clientSecret}",
  "audience": "vinquery:api:decisioq"
}

Catalog Discovery

Use DKS to discover the catalog and then load complete metadata for AUTO-RENT-008.

Catalog
GET https://dks.vinquery.com/decisioncatalog
Authorization: Bearer {jwtToken}
Decision Detail
GET https://dks.vinquery.com/decisioncatalog/decisions/AUTO-RENT-008
Authorization: Bearer {jwtToken}

Criteria

Criterion IDs are intentionally stable machine identifiers. Display labels are for users; request values should be keyed by canonical criterionId.

Criterion IDNameDirectionWeightValidation
assign_rental_vehicle_customer_fit_scoreReservation Vehicle Fitmaximize18score_0_to_100
assign_rental_vehicle_vehicle_or_resource_fitAvailable Unit Matchmaximize18score_0_to_100
assign_rental_vehicle_operational_readinessVehicle Prep Readinessmaximize17score_0_to_100
assign_rental_vehicle_financial_impactRental Margin Impactmaximize17score_0_to_100
assign_rental_vehicle_risk_exposureAssignment Riskminimize15score_0_to_100
assign_rental_vehicle_time_sensitivityPickup Time Pressureminimize15score_0_to_100

Constraint Processing

This decision currently has no catalog-defined hard constraints. All validated candidates proceed to criteria-based ranking.

Verified Catalog ConstraintStatusEffect
None returned by DKS for AUTO-RENT-008No hard constraints definedCandidate eligibility is determined by request validation; all validated candidates are ranked by criteria.
Eligible and Excluded Candidates
{
  "constraintSummary": {
    "definedConstraintCount": 0,
    "activeConstraintCount": 0,
    "eligibleOptionCount": 3,
    "excludedOptionCount": 0,
    "eligibleOptions": [
      "OPTION-001",
      "OPTION-002",
      "OPTION-003"
    ],
    "excludedOptions": []
  }
}
Constraint Handling Pattern
const constraints = decisionDetail.constraints || [];
if (constraints.length === 0) {
  // No catalog-defined hard constraints.
  // Submit all validated candidates for criteria-based ranking.
}

const summary = response.constraintSummary;
const excluded = response.decisionResult?.excludedOptions || [];

Excluded candidates do not participate in ranking because hard constraints are evaluated before scoring. For AUTO-RENT-008, no candidates are excluded by catalog-defined constraints because DKS currently defines none for this decision.

Industry Profile

The active industry profile uses $.reservations as the options path, $.optionId as the option ID, and $.name as the option display name.

Business Data PathCriterion ID
option.vehicle.assignment.reservationVehicleFitassign_rental_vehicle_customer_fit_score
option.vehicle.assignment.availableUnitMatchassign_rental_vehicle_vehicle_or_resource_fit
option.vehicle.assignment.vehiclePrepReadinessassign_rental_vehicle_operational_readiness
option.vehicle.assignment.rentalMarginImpactassign_rental_vehicle_financial_impact
option.risk.assignmentRiskassign_rental_vehicle_risk_exposure
option.schedule.pickupTimePressureassign_rental_vehicle_time_sensitivity
Business Data Fragment
{
  "requestContext": {
    "sourceSystem": "vehicle-rental-demo",
    "correlationId": "auto-rent-008-demo-001"
  },
  "reservations": [
    {
      "optionId": "OPTION-001",
      "name": "Compact SUV Unit",
      "vehicle": {
        "assignment": {
          "reservationVehicleFit": 88,
          "availableUnitMatch": 91,
          "vehiclePrepReadiness": 84,
          "rentalMarginImpact": 76
        }
      },
      "risk": {
        "assignmentRisk": 20
      },
      "schedule": {
        "pickupTimePressure": 26
      }
    }
  ]
}
Prepared Option Values
{
  "optionId": "OPTION-001",
  "name": "Compact SUV Unit",
  "values": {
    "assign_rental_vehicle_customer_fit_score": 88,
    "assign_rental_vehicle_vehicle_or_resource_fit": 91,
    "assign_rental_vehicle_operational_readiness": 84,
    "assign_rental_vehicle_financial_impact": 76,
    "assign_rental_vehicle_risk_exposure": 20,
    "assign_rental_vehicle_time_sensitivity": 26
  }
}

Profiles and Scenarios

A profile changes criterion weights. A scenario describes the operating context for the execution. The active DKS catalog exposes these choices with the decision detail response.

Profile IDNamePurpose
balancedBalancedBalances customer fit, resource fit, readiness, financial impact, risk, and timing.
revenue_focusedRevenue FocusedPlaces extra emphasis on revenue, margin, and financial impact.
risk_controlRisk ControlPlaces extra emphasis on reducing rental, compliance, insurance, and operational risk.
Scenario IDNameUse When
standard_rentalStandard RentalNormal demand, standard customer risk, and normal branch capacity.
peak_demandPeak DemandHigh utilization, limited availability, and elevated timing pressure.
risk_sensitiveRisk SensitiveHigher-than-normal fraud, damage, compliance, or insurance exposure.
Use standard_rental in runnable examples because it is present in the active DKS scenario list for AUTO-RENT-008.

Prepared Input

For Prepared Decision Input, send decisionId, selected profile/scenario IDs, and option values keyed by canonical criterion ID.

Prepared Decision Input JSON
{
  "decisionId": "AUTO-RENT-008",
  "profileId": "balanced",
  "scenarioId": "standard_rental",
  "algorithm": "TOPSIS",
  "weightStrategy": "Manual",
  "runSensitivity": false,
  "requestContext": {
    "correlationId": "auto-rent-008-demo-001"
  },
  "options": [
    {
      "optionId": "OPTION-001",
      "name": "Compact SUV Unit",
      "values": {
        "assign_rental_vehicle_customer_fit_score": 88,
        "assign_rental_vehicle_vehicle_or_resource_fit": 91,
        "assign_rental_vehicle_operational_readiness": 84,
        "assign_rental_vehicle_financial_impact": 76,
        "assign_rental_vehicle_risk_exposure": 20,
        "assign_rental_vehicle_time_sensitivity": 26
      }
    },
    {
      "optionId": "OPTION-002",
      "name": "Standard Sedan Unit",
      "values": {
        "assign_rental_vehicle_customer_fit_score": 79,
        "assign_rental_vehicle_vehicle_or_resource_fit": 85,
        "assign_rental_vehicle_operational_readiness": 92,
        "assign_rental_vehicle_financial_impact": 70,
        "assign_rental_vehicle_risk_exposure": 18,
        "assign_rental_vehicle_time_sensitivity": 34
      }
    },
    {
      "optionId": "OPTION-003",
      "name": "Premium SUV Unit",
      "values": {
        "assign_rental_vehicle_customer_fit_score": 92,
        "assign_rental_vehicle_vehicle_or_resource_fit": 73,
        "assign_rental_vehicle_operational_readiness": 68,
        "assign_rental_vehicle_financial_impact": 88,
        "assign_rental_vehicle_risk_exposure": 42,
        "assign_rental_vehicle_time_sensitivity": 50
      }
    }
  ]
}

Execute

cURL
curl -X POST "https://dde.vinquery.com/api/v1/decide" \
  -H "Authorization: Bearer ${DECISIOQ_TOKEN}" \
  -H "Content-Type: application/json" \
  -H "X-Correlation-Id: auto-rent-008-demo-001" \
  --data @auto-rent-008-execute.json

The Decision Engine validates the request, retrieves authoritative criteria, constraints, profiles, scenarios, and validation metadata from DKS, applies hard constraints, ranks eligible options, and returns the decision result plus execution metadata.

Interpret the Result

The successful response is centered on decisionResult. The winner and ranking are deterministic outputs; optional explanation fields add context but do not change the ranking.

Successful Response Shape
{
  "service": "decisioq",
  "version": "7.6.3",
  "requestId": "0HNE...",
  "operation": "Decide",
  "success": true,
  "decisionType": "AUTO-RENT-008",
  "decisionVersion": "13.9.3",
  "timestampUtc": "2026-07-18T00:00:00Z",
  "decisionResult": {
    "winner": "OPTION-001",
    "confidence": 72.4,
    "ranking": [
      {
        "optionId": "OPTION-001",
        "score": 0.8421,
        "breakdown": {
          "assign_rental_vehicle_customer_fit_score": 0.18,
          "assign_rental_vehicle_vehicle_or_resource_fit": 0.18,
          "assign_rental_vehicle_operational_readiness": 0.17,
          "assign_rental_vehicle_financial_impact": 0.17,
          "assign_rental_vehicle_risk_exposure": 0.15,
          "assign_rental_vehicle_time_sensitivity": 0.15
        },
        "normalizationBreakdown": {}
      }
    ],
    "excludedOptions": [],
    "explanation": {
      "summary": "Compact SUV Unit ranked highest based on the submitted rental assignment criteria.",
      "strengths": [],
      "weaknesses": [],
      "exclusions": []
    }
  },
  "constraintSummary": {
    "definedConstraintCount": 0,
    "activeConstraintCount": 0,
    "eligibleOptionCount": 3,
    "excludedOptionCount": 0,
    "eligibleOptions": [
    "OPTION-001",
    "OPTION-002",
    "OPTION-003"
    ],
    "excludedOptions": []
  },
  "warnings": [],
  "requestContext": {
    "correlationId": "auto-rent-008-demo-001"
  }
}
WinnerThe selected option ID in decisionResult.winner.
RankingAll eligible options ordered by score.
BreakdownCriterion-level evidence for the ranking.

Sensitivity Analysis

Set runSensitivity to true on catalog execution when the client wants recommendation-stability information in the same response. The sensitivity engine perturbs criterion weights by controlled factors and reports whether the winner remains stable.

Sensitivity Result Shape
{
  "sensitivityResult": {
    "stableWinner": true,
    "winner": "OPTION-001",
    "mostSensitiveCriterion": "assign_rental_vehicle_vehicle_or_resource_fit",
    "confidence": 95,
    "criterionImpacts": {
      "assign_rental_vehicle_vehicle_or_resource_fit": 0.1842
    },
    "winnerChangeCounts": {
      "assign_rental_vehicle_vehicle_or_resource_fit": 0
    }
  }
}

Use sensitivity output to decide whether a recommendation is robust enough for automation or should be reviewed by a person.

Explanation of Decision Result

Every successful response can include deterministic explanation text under decisionResult.explanation and explanation. If the optional AI layer is enabled, the response may also include an ai block with structured business-language explanation fields.

AI Explanation Shape
{
  "ai": {
    "enabled": true,
    "generated": true,
    "schemaValidated": true,
    "explanation": {
      "summary": "The selected rental vehicle provided the strongest overall assignment fit.",
      "whyRecommended": "It combined strong reservation fit, available unit match, and readiness with acceptable risk exposure and pickup time pressure.",
      "keyDrivers": [],
      "tradeoffs": [],
      "competitors": [],
      "sensitivitySummary": "Sensitivity analysis was not included in this response.",
      "scenarioSummary": "The standard rental scenario was selected.",
      "risks": [],
      "nextSteps": [],
      "assumptions": []
    }
  }
}
Explanation output is supporting context. Business-facing pages should render the explanation, warnings, assumptions, and limitations without provider branding.

Tracing and Logs

Use request identifiers to connect client, catalog, and execution activity during support or integration testing.

X-Request-Id
Optional client-supplied request ID. If omitted, the server generates one.
X-Correlation-Id
Optional client correlation value propagated from DDE to DKS.
requestContext.correlationId
Optional payload value echoed in the response and used for tracing.
executionTrace
Advanced execution metadata including selected profile, selected scenario, effective weights, and applied constraints.

Code Examples

These examples demonstrate the current DecisioQ flow:

  1. Request jwtToken from https://identity.vinquery.com/connect/token.
  2. Load AUTO-RENT-008 metadata from https://dks.vinquery.com/decisioncatalog/decisions/AUTO-RENT-008.
  3. Execute a Prepared Decision Input at https://dde.vinquery.com/api/v1/decide.

Set these environment variables before running any companion example:

Environment variables
DECISIOQ_CLIENT_ID
DECISIOQ_CLIENT_SECRET

Optional:
DECISIOQ_IDENTITY_URL=https://identity.vinquery.com/connect/token
DECISIOQ_DKS_URL=https://dks.vinquery.com
DECISIOQ_DDE_URL=https://dde.vinquery.com

Download the source files directly:

Troubleshooting

SymptomLikely CauseWhat to Check
401 UnauthorizedMissing, expired, or invalid bearer token.Request a fresh jwtToken from Identity and send it as Authorization: Bearer ....
Decision not foundThe decision ID is not in the active catalog.Load /decisioncatalog/decisions/AUTO-RENT-008 and confirm the ID is published.
Validation failedA required criterion value is missing or outside its rule.Use canonical criterion IDs and keep score values in the expected range.
HTML error responseAn upstream hosted service failed before returning JSON.Check service health and server logs for Identity, DKS, or DDE.

Production Checklist

Security

Keep API Consumer credentials and jwtTokens on the server side. Use HTTPS, short-lived bearer tokens, and an API Consumer linked to a DecisioQ account for usage accounting.

Catalog

Load decision metadata from DKS and cache cautiously. Refresh when catalog versions change.

Request Quality

Use canonical criterion IDs, validate value ranges, and send at least two candidate options.

Operations

Send correlation IDs, record request IDs, and monitor non-JSON upstream failures.

Explanation

Display explanation text as supporting context only. Never let AI text override deterministic results.

User Experience

Show business labels to users and keep raw execution trace collapsed for advanced diagnostics.