Comprehensive vendor performance evaluation and scoring system with multi-dimensional metrics, weighted calculations, and tier classification.
The Vendor Rating System provides a data-driven approach to evaluating vendor performance across multiple criteria. It calculates composite scores based on delivery performance, quality metrics, pricing competitiveness, compliance adherence, and overall responsiveness.
| Tier | Score Range | Benefits | Review Frequency |
|---|---|---|---|
| Platinum | 90-100 | Preferred vendor status, expedited payments, increased PO limits | Annually |
| Gold | 75-89 | Priority consideration, standard payment terms | Semi-annually |
| Silver | 60-74 | Standard vendor status, regular monitoring | Quarterly |
| Bronze | 40-59 | Probationary status, improvement plan required | Monthly |
| Under Review | 0-39 | Suspension risk, mandatory corrective action | Weekly |
Master vendor information and current rating summary
Detailed rating history for each vendor evaluation period
Raw performance metrics collected from transactions
Product/service categories with category-specific rating weights
Blacklisted vendors with reasons and duration
Compliance documents affecting vendor rating
┌─────────────────────────────────────────────────────────────────────────────┐
│ PERFORMANCE DATA SOURCES │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────────────┬───────────────┼───────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ PO │ │ GRN │ │ Quality │ │ Invoice │ │ Vendor │
│ System │ │ System │ │ Check │ │ System │ │ Portal │
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Lead │ │ On-Time │ │ Defect │ │ Price │ │ Response│
│ Times │ │ Delivery│ │ Rates │ │ Accuracy│ │ Times │
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
│ │ │ │ │
└───────────────┴───────────────┼───────────────┴───────────────┘
│
▼
┌────────────────────────┐
│ vendor_performance │
│ (Raw Metrics) │
└───────────┬────────────┘
│
▼
┌────────────────────────┐
│ Rating Engine │
│ (Scheduled Job) │
└───────────┬────────────┘
│
▼
┌────────────────────────┐
│ vendor_ratings │
│ (Calculated Scores) │
└───────────┬────────────┘
│
▼
┌────────────────────────┐
│ vendors │
│ (Overall Rating/Tier) │
└────────────────────────┘
Gather all performance data for the rating period from vendor_performance table
Compute score (0-100) for each criterion based on metric formulas
Multiply each score by its category-specific weight from vendor_categories
Add all weighted scores to get overall composite score
Map overall score to vendor tier classification (Platinum/Gold/Silver/Bronze/Under Review)
Save to vendor_ratings and update vendors.overall_rating
-- Delivery Score Calculation DELIVERY_SCORE = ( (on_time_deliveries / total_deliveries) * 50 + -- OTD Rate (50%) (1 - ABS(actual_lead - quoted_lead) / quoted_lead) * 30 + -- Lead Accuracy (30%) (complete_orders / total_orders) * 20 -- Fill Rate (20%) ) * 100 -- Quality Score Calculation QUALITY_SCORE = ( (1 - defects / total_units) * 40 + -- Defect-free Rate (40%) (1 - returns / total_shipments) * 30 + -- No-Return Rate (30%) (spec_compliant_items / total_items) * 30 -- Spec Compliance (30%) ) * 100 -- Overall Score (Weighted Sum) OVERALL_SCORE = ( delivery_score * category.delivery_weight + quality_score * category.quality_weight + price_score * category.price_weight + compliance_score * category.compliance_weight + responsiveness_score * category.responsiveness_weight )
public class VendorRatingService : IVendorRatingService { private readonly IVendorRepository _vendorRepo; private readonly IPerformanceRepository _performanceRepo; private readonly ICategoryRepository _categoryRepo; public async Task<VendorRating> CalculateVendorRating( Guid vendorId, DateRange period) { // 1. Get vendor and category weights var vendor = await _vendorRepo.GetByIdAsync(vendorId); var weights = await _categoryRepo.GetWeightsAsync(vendor.CategoryId); // 2. Collect raw performance metrics var metrics = await _performanceRepo .GetMetricsForPeriodAsync(vendorId, period); // 3. Calculate individual scores var deliveryScore = CalculateDeliveryScore(metrics); var qualityScore = CalculateQualityScore(metrics); var priceScore = CalculatePriceScore(metrics); var complianceScore = await CalculateComplianceScore(vendorId); var responsivenessScore = CalculateResponsivenessScore(metrics); // 4. Apply weights and sum var overallScore = deliveryScore * weights.DeliveryWeight + qualityScore * weights.QualityWeight + priceScore * weights.PriceWeight + complianceScore * weights.ComplianceWeight + responsivenessScore * weights.ResponsivenessWeight; // 5. Determine tier var tier = DetermineTier(overallScore); // 6. Save and return var rating = new VendorRating { ... }; await _vendorRepo.SaveRatingAsync(rating); return rating; } private VendorTier DetermineTier(decimal score) => score switch { >= 90 => VendorTier.Platinum, >= 75 => VendorTier.Gold, >= 60 => VendorTier.Silver, >= 40 => VendorTier.Bronze, _ => VendorTier.UnderReview }; }
| Trigger Condition | Automated Action | Notification |
|---|---|---|
| Score drops below 40 | Flag vendor for review, restrict new POs | Alert to Procurement Manager |
| Score drops below 25 | Suspend vendor, block new POs | Urgent alert + email to vendor |
| Tier upgrade (e.g., Silver → Gold) | Update payment terms, increase limits | Congratulatory email to vendor |
| Tier downgrade (e.g., Gold → Silver) | Reduce PO limits, increase monitoring | Warning email to vendor |
| Compliance score drops (expired docs) | Flag for document renewal | Reminder to vendor + buyer |
| 3 consecutive periods below 50 | Initiate blacklist review process | Escalation to management |
ProKure Database Documentation - Vendor Rating Logic v1.0
Part of the ProKure Procurement Management System