Comprehensive kitting, bundling, custom packaging, and product customization operations with configurable workflows, quality controls, and revenue optimization for enhanced customer value.
The Value-Added Services (VAS) service is a strategic component of the Paklog WMS/WES platform, enabling revenue-generating customization and assembly operations beyond standard warehousing. Value-added services represent a $15B+ market opportunity for 3PLs, with profit margins 30-50% higher than basic storage and fulfillment.
This service implements configurable workflow templates for kitting, bundling, gift wrapping, labeling, personalization, and light assembly operations. It coordinates with warehouse operations, inventory management, and quality control systems to deliver customized products while maintaining operational efficiency and quality standards.
The Value-Added Services bounded context is responsible for:
- VAS order lifecycle management and workflow execution
- Kitting and bundling operations with BOM management
- Custom packaging and gift wrapping services
- Product personalization and labeling
- Light assembly and pre-retail services
- Quality inspection and defect tracking
- VAS billing and cost allocation
- VAS Order: Customer request for value-added service operations
- Kitting: Assembly of multiple components into a single sellable unit
- Bundling: Combining multiple finished products into a promotional package
- Bill of Materials (BOM): List of components required for kitting/assembly
- Custom Packaging: Non-standard packaging tailored to customer requirements
- Personalization: Adding customer-specific elements (monograms, messages, etc.)
- Gift Wrapping: Premium packaging for gift presentation
- Pre-Retail Service: Preparation activities before retail sale (ticketing, tagging, etc.)
- VAS Workstation: Dedicated area for performing value-added operations
- Quality Checkpoint: Inspection point within VAS workflow
- Service Level: Tier of service (BASIC, PREMIUM, LUXURY)
VASOrder (Aggregate Root)
- Manages complete VAS order lifecycle
- Orchestrates workflow execution
- Tracks service completion and quality
- Enforces business rules and constraints
KittingOperation
- Represents kit assembly workflow
- Manages BOM and component allocation
- Tracks assembly progress
- Validates component availability
CustomizationTemplate
- Defines customization workflow steps
- Specifies required materials and tools
- Contains quality standards
- Manages personalization rules
QualityInspection
- Captures quality checkpoint data
- Records defects and issues
- Triggers rework or rejection
- Maintains inspection audit trail
VASServiceType: KITTING, BUNDLING, GIFT_WRAP, LABELING, PERSONALIZATION, ASSEMBLYWorkflowStep: Individual operation within VAS workflowServiceTier: BASIC, PREMIUM, LUXURYBillOfMaterials: Components with quantitiesPersonalizationSpec: Customization instructionsQualityGrade: Quality assessment resultVASStatus: REQUESTED, SCHEDULED, IN_PROGRESS, COMPLETED, FAILEDServiceCost: Cost breakdown for billing
VASOrderCreatedEvent: New VAS order receivedVASOrderScheduledEvent: Order scheduled to workstationKittingStartedEvent: Kitting operation beganComponentAllocatedEvent: Components allocated for kittingCustomizationCompletedEvent: Personalization finishedQualityInspectionPassedEvent: Quality check passedQualityInspectionFailedEvent: Quality check failedVASOrderCompletedEvent: All VAS operations finishedReworkRequiredEvent: Defect requires reworkVASBillingGeneratedEvent: Billing charges calculated
This service follows Paklog's standard architecture patterns:
- Hexagonal Architecture (Ports and Adapters)
- Domain-Driven Design (DDD)
- Event-Driven Architecture with Apache Kafka
- CloudEvents specification for event formatting
- CQRS for command/query separation
value-added-services/
├── src/
│ ├── main/
│ │ ├── java/com/paklog/vas/
│ │ │ ├── domain/ # Core business logic
│ │ │ │ ├── aggregate/ # VASOrder, KittingOperation
│ │ │ │ ├── entity/ # Supporting entities
│ │ │ │ ├── valueobject/ # VASServiceType, BillOfMaterials
│ │ │ │ ├── service/ # Domain services
│ │ │ │ ├── repository/ # Repository interfaces (ports)
│ │ │ │ └── event/ # Domain events
│ │ │ ├── application/ # Use cases & orchestration
│ │ │ │ ├── port/
│ │ │ │ │ ├── in/ # Input ports (use cases)
│ │ │ │ │ └── out/ # Output ports
│ │ │ │ ├── service/ # Application services
│ │ │ │ ├── command/ # Commands
│ │ │ │ └── query/ # Queries
│ │ │ └── infrastructure/ # External adapters
│ │ │ ├── persistence/ # MongoDB repositories
│ │ │ ├── messaging/ # Kafka publishers/consumers
│ │ │ ├── web/ # REST controllers
│ │ │ └── config/ # Configuration
│ │ └── resources/
│ │ └── application.yml # Configuration
│ └── test/ # Tests
├── k8s/ # Kubernetes manifests
├── docker-compose.yml # Local development
├── Dockerfile # Container definition
└── pom.xml # Maven configuration
- Kitting & Assembly: Multi-component kit creation with BOM validation
- Bundling Operations: Product bundling with promotional packaging
- Gift Wrapping: Premium gift presentation services
- Custom Labeling: Product-specific labels and tags
- Personalization: Engraving, embroidery, monogramming
- Pre-Retail Services: Ticketing, tagging, steaming, inspection
- Quality Control: Multi-point quality inspections
- Workflow Configuration: Drag-and-drop workflow builder
- Configurable workflow templates
- BOM management with version control
- Material consumption tracking
- Workstation capacity planning
- Automated quality gates
- Rework management
- Photo documentation
- Cost tracking and billing integration
- Performance analytics
- Integration with robotics for automated kitting
- Java 21 - Programming language
- Spring Boot 3.2.5 - Application framework
- MongoDB - VAS order and workflow persistence
- Redis - Workstation queue management
- Apache Kafka - Event streaming
- CloudEvents 2.5.0 - Event format specification
- Resilience4j - Fault tolerance
- Micrometer - Metrics collection
- OpenTelemetry - Distributed tracing
- Camunda - Workflow engine (optional for complex workflows)
- Java 21+
- Maven 3.8+
- Docker & Docker Compose
- MongoDB 7.0+
- Redis 7.2+
- Apache Kafka 3.5+
- Clone the repository
git clone https://github.com/paklog/value-added-services.git
cd value-added-services- Start infrastructure services
docker-compose up -d mongodb kafka redis- Build the application
mvn clean install- Run the application
mvn spring-boot:run- Verify the service is running
curl http://localhost:8097/actuator/health# Start all services including the application
docker-compose up -d
# View logs
docker-compose logs -f value-added-services
# Stop all services
docker-compose downOnce running, access the interactive API documentation:
- Swagger UI: http://localhost:8097/swagger-ui.html
- OpenAPI Spec: http://localhost:8097/v3/api-docs
POST /api/v1/vas-orders- Create new VAS orderGET /api/v1/vas-orders/{orderId}- Get order detailsPUT /api/v1/vas-orders/{orderId}/schedule- Schedule to workstationPUT /api/v1/vas-orders/{orderId}/start- Start VAS operationsPUT /api/v1/vas-orders/{orderId}/complete- Complete orderPUT /api/v1/vas-orders/{orderId}/cancel- Cancel order
POST /api/v1/kitting- Create kitting operationGET /api/v1/kitting/{kittingId}- Get kitting detailsPOST /api/v1/kitting/{kittingId}/allocate-components- Allocate BOM componentsPUT /api/v1/kitting/{kittingId}/assemble- Complete assemblyGET /api/v1/kitting/bom/{productId}- Get bill of materials
POST /api/v1/customization- Create customization orderGET /api/v1/customization/{customizationId}- Get customization detailsPOST /api/v1/customization/{customizationId}/personalize- Apply personalizationPUT /api/v1/customization/{customizationId}/complete- Complete customization
POST /api/v1/quality-inspections- Create inspectionGET /api/v1/quality-inspections/{inspectionId}- Get inspection detailsPUT /api/v1/quality-inspections/{inspectionId}/pass- Mark inspection passedPUT /api/v1/quality-inspections/{inspectionId}/fail- Mark inspection failedPOST /api/v1/quality-inspections/{inspectionId}/rework- Request rework
GET /api/v1/workflows- List workflow templatesPOST /api/v1/workflows- Create workflow templateGET /api/v1/workflows/{workflowId}- Get workflow detailsPUT /api/v1/workflows/{workflowId}- Update workflowDELETE /api/v1/workflows/{workflowId}- Delete workflow
GET /api/v1/analytics/throughput- VAS throughput metricsGET /api/v1/analytics/quality-rate- Quality pass rateGET /api/v1/analytics/revenue- VAS revenue analysis
Key configuration properties in application.yml:
vas:
operations:
max-concurrent-orders: 100
default-service-tier: BASIC
enable-quality-gates: true
photo-documentation-required: false
kitting:
bom-validation-enabled: true
component-allocation-strategy: FIFO
allow-partial-kits: false
track-serial-numbers: true
quality:
inspection-points: [PRE_WORK, IN_PROGRESS, FINAL]
auto-fail-threshold: 3
rework-limit: 2
photo-on-defect: true
workstation:
capacity-per-station: 20
assignment-strategy: LOAD_BALANCED
skill-matching-enabled: true
billing:
auto-calculate-costs: true
cost-allocation-method: ACTIVITY_BASED
invoice-on-completion: true
personalization:
max-text-length: 50
allowed-fonts: [ARIAL, HELVETICA, SCRIPT]
supported-techniques: [ENGRAVING, EMBROIDERY, PRINTING]VASOrderCreatedEvent- New VAS order receivedVASOrderScheduledEvent- Order scheduled to workstationKittingStartedEvent- Kitting operation beganComponentAllocatedEvent- Components allocatedCustomizationCompletedEvent- Personalization finishedQualityInspectionPassedEvent- Quality check passedQualityInspectionFailedEvent- Quality check failedVASOrderCompletedEvent- All operations finishedReworkRequiredEvent- Defect requires reworkVASBillingGeneratedEvent- Billing charges calculated
OrderCreatedEventfrom Order Management (triggers VAS requests)InventoryAllocatedEventfrom Inventory Service (component availability)ProductCreatedEventfrom Product Catalog (new kitting BOMs)QualityStandardUpdatedEventfrom Quality Compliance (inspection criteria)
# Create namespace
kubectl create namespace paklog-vas
# Apply configurations
kubectl apply -f k8s/deployment.yaml
# Check deployment status
kubectl get pods -n paklog-vas- Scaling: Horizontal scaling supported via Kubernetes HPA
- High Availability: Deploy minimum 3 replicas
- Resource Requirements:
- Memory: 1 GB per instance
- CPU: 0.5 core per instance
- Monitoring: Prometheus metrics exposed at
/actuator/prometheus - Storage: S3-compatible storage for photo documentation
# Run unit tests
mvn test
# Run integration tests
mvn verify
# Run with coverage
mvn clean verify jacoco:report
# View coverage report
open target/site/jacoco/index.html- Unit Tests: >80%
- Integration Tests: >70%
- Domain Logic: >90%
- Workflow Execution: >85%
- Kitting Throughput: 500 kits/hour per workstation
- API Latency: p99 < 150ms
- Workflow Execution: < 2ms per step
- BOM Validation: < 50ms
- Quality Inspection: 2-5 minutes per unit
- Order Completion: 95% within SLA
- Redis queue for workstation assignment
- Connection pooling for MongoDB
- Async event publishing
- Cached workflow templates
- Batch component allocation
- Parallel quality inspections
- VAS orders processed
- Average order cycle time
- Quality pass rate
- Rework percentage
- Workstation utilization
- Revenue per service type
- Component consumption rate
- Defect rate by service type
/actuator/health- Overall health/actuator/health/liveness- Kubernetes liveness/actuator/health/readiness- Kubernetes readiness/actuator/health/workstations- Workstation availability
OpenTelemetry integration for end-to-end VAS order tracking.
- Revenue Growth: +$2M annual VAS revenue per facility
- Profit Margin: 30-50% higher margins vs standard fulfillment
- Customer Retention: +25% retention through differentiated services
- Order Value: +40% average order value with VAS
- Quality Rate: 98%+ first-pass quality
- Operational Efficiency: -20% labor cost through workflow optimization
- Customer Satisfaction: +15 NPS improvement with premium services
-
Component Allocation Failures
- Verify inventory availability in system
- Check BOM accuracy and version
- Review allocation strategy configuration
- Examine safety stock levels
-
Quality Inspection Bottlenecks
- Add more inspection workstations
- Review inspection criteria complexity
- Check inspector availability
- Consider automated inspection for simple checks
-
Workflow Execution Delays
- Review workstation capacity settings
- Check for skill mismatches
- Analyze workflow step complexity
- Examine material availability
-
Billing Discrepancies
- Verify cost allocation rules
- Check service tier assignments
- Review material consumption tracking
- Examine time tracking accuracy
- Multi-component Kits: Assembly of 2-50 components
- Subscription Boxes: Recurring kit assembly
- Promotional Bundles: Marketing campaign kits
- Sample Kits: Product sample assembly
- Engraving: Laser or mechanical engraving
- Embroidery: Text or logo embroidery
- Screen Printing: Custom designs
- Monogramming: Personalized initials
- Gift Wrapping: Premium gift presentation
- Custom Boxes: Branded packaging
- Retail Packaging: Shelf-ready packaging
- Protective Packaging: Specialized protection
- Ticketing & Tagging: Price and security tags
- Steaming & Pressing: Garment preparation
- Quality Inspection: Pre-retail QC
- Display Assembly: Retail display setup
workflow:
name: "Premium Gift Kit Assembly"
steps:
- name: "Component Verification"
type: QUALITY_CHECK
required: true
- name: "Kit Assembly"
type: MANUAL_OPERATION
station: KITTING_STATION_1
estimated_duration: 5 minutes
- name: "Gift Wrapping"
type: MANUAL_OPERATION
station: GIFT_WRAP_STATION
estimated_duration: 3 minutes
- name: "Quality Inspection"
type: QUALITY_CHECK
required: true
- name: "Final Packaging"
type: MANUAL_OPERATION
estimated_duration: 2 minutes- Vision-guided component picking
- Robotic assembly assistance
- Automated quality inspection
- Bin packing optimization
- Collaborative robots (cobots) for kitting
- Vision systems for quality inspection
- Automated packaging systems
- Label applicators
- Follow hexagonal architecture principles
- Maintain domain logic in domain layer
- Keep infrastructure concerns separate
- Write comprehensive tests for all changes
- Document domain concepts using ubiquitous language
- Test workflows with real-world scenarios
- Follow existing code style and conventions
For issues and questions:
- Create an issue in GitHub
- Contact the Paklog team
- Check the documentation
Copyright © 2024 Paklog. All rights reserved.
Version: 1.0.0 Phase: 3 (Differentiation) Priority: P2 Port: 8097 Maintained by: Paklog VAS Team Last Updated: November 2024