Skip to main content
Version: Fleeto

Warranty Management

Authors

  • Sanket Mal
  • Ayan Ghosh

Last Updated Date

2024-03-12


SRS References


Version History

VersionDateChangesAuthor
1.02024-12-05Initial draftSanket Mal, Ayan Ghsoh
2.02024-03-12Enhanced warranty claim feature to support multiple componentsSanket Mal, Ayan Ghsoh

Feature Overview

Objective:
The warranty planning feature is designed to streamline and standardize the process of handling warranty claims within the organization. It ensures seamless communication and processing across the hierarchy of Dealer, Distributor, and Fleeto, while allowing for clear decision-making, efficient replacements or repairs, and robust tracking of claims from initiation to closure.

Scope:
1. The feature encompasses the entire lifecycle of a warranty claim, including initiation, verification, repair/replacement/reject, and delivery of resolved claims.

2. Applicable for three hierarchical roles:

  • Dealer: Can initiate warranty claims.
  • Distributor: Can both initiate claims (to the Fleeto) and process incoming claims (from Dealers).
  • Fleeto: Can only process warranty claims (from Distributors or dealers).

3. The system must generate a warranty ticket for each claim and track its status until resolution.

Dependencies:


Requirements

  1. Warranty Claim Initiation:

    • Buyers or authorized sellers (e.g., Distributors/Owners) can initiate warranty claims for multiple components (which are purchased in a particular invoice), either on behalf of the buyer or the seller, by referencing the corresponding invoice number.
    • Immediate after claim create a system generate ticket number for the warranty claim.
  2. Initial Approval:

    • Upon initiating a warranty claim, a decision-making process should verify the eligibility of the claim based on the component, purchase details, and warranty coverage.
    • Sellers (Distributors) can approve or reject claims based on eligibility checks.
  3. Damage Assessment and Claim Resolution:

    • The process should accommodate options for direct replacement of the defective components without receiving or checking the damage components or the seller can ask the buyer to send the damaged component(s) before proceeding.Damaged components are sent for a quality inspection to determine the next steps.
    • The seller confirms receipt and records relevant details.
  4. Inspection & Decision Making:

  • The inspection team assesses components and suggests either repair, replacement, or rejection.
  • A higher authority makes the final decision before proceeding to service.
  1. Service Processing:

    • Approved claims undergo either repair or replacement as per the decision.
    • The system tracks the progress of service operations.
  2. Free of Charge (FOC) Invoice Generation:

    • The system must generate FOC invoices only for the components that are being replaced under warranty, with relevant details such as the invoice number and details of the replacement component.
    • Generate an FOC invoice PDF upon request for the warranty claim.
  3. Shipping & Delivery:

    • The seller confirms the shipping method for the repaired/replaced component(s).
    • Dispatched components are assigned tracking details.
  4. Automated Claim Closure:

  • Claims are automatically closed upon successful delivery.
  1. Lifecycle Tracking of Warranty Claims

Each claim progresses through multiple stages, represented by a status in the WarrantyStatus enum.

  • I. Claim Initiated (ClaimInitiated = 0)
    • The buyer or the seller on behalf of the buyer can submits a warranty claim for one or multiple components which are purchased in the exactly same invoice.
    • The system records the claim and assigns a unique ticket number.
  • II. Claim Approved (ClaimAccepted = 1)
    • The seller reviews the claim request and accepted it for the further procedure if the components are eligible for warranty or the components are in warranty period.
  • III. Claim Rejected (ClaimRejected = 2)
    • The seller determines that the components do not meet the warranty criteria.
    • The claim is rejected, and the buyer is notified with the reason for rejection.
  • IV. Waiting for Damaged Component (WaitingForDamagedComponent = 3)
    • If required, the seller requests the buyer to send the damaged components before proceeding with further steps.
    • The claim remains in this status until the components are received.
  • V. Damaged Component Received (DamagedComponentReceived = 4)
    • The seller confirms receipt of the damaged components.
    • The components are recorded in the system and prepared for inspection.
  • VI. Sent for Inspection (SentForInspection = 5)
    • The damaged components are sent for detailed inspection to the quality team.
    • The inspection determines if repair or replacement or rejection are required for each individual component.
  • VII. Waiting for Final Approval (WaitingForFinalApproval = 6)
    • After getting the inspection report or suggestion of the quality team, a higher authority team took the final decision that which action will take against each individual components (repair or replacement or reject).
    • A final approval is required before proceeding to the next step.
  • VIII. Service Processing (ServiceProcessing = 7)
    • The repair or replacement process begins as per the approved decision.
    • The system tracks the progress of service operations.
  • IX. Shipping Method Confirmed (ShippingMethodConfirmed = 8)
    • The seller determines how the repaired or replaced components will be shipped to the buyer.
  • X. Dispatched (Dispatched = 9)
    • The repaired or replacement components are shipped to the buyer.
    • The tracking details are updated in the system.
  • XI. Delivered (Delivered = 10)
    • The buyer receives the repaired or replaced components.
    • The system marks the delivery as complete.
  • XII. Claim Closed (ClaimClosed = 11)
    • Immediately after delivery, the claim is automatically marked as closed.
    • The warranty claim process is successfully completed.

Design Specifications

(Provide detailed design specifications, including UI/UX designs, API interfaces, and any other relevant architectural details.)

  • UI/UX Design:
    (Include wireframes, mockups, or links to design files.) warranty management ui

  • Data Models:
    (Detail the data structures, including database schemas or objects.)


    public class WarrantyClaim
    {
    public Guid ClaimId { get; set; }
    public required Guid ClaimFor { get; set; } // Dealer who claimed
    public Guid AssignedTo { get; set; } // Assigned dealer or team
    public string? ClaimInitiateBy { get; set; } // Person who initiated the claim
    public Guid? ClaimInitiatedByConsumerId { get; set; } // Consumerid of the person who initiated the claim
    public required string InvoiceNumber { get; set; }
    public DateTime InvoiceDate { get; set; }
    public required List<ClaimedComponentDetails> ClaimedComponentDetails { get; set; }
    public string? WarrantyTicketNumber { get; set; }
    public WarrantyStatus? CurrentStatus { get; set; }
    public bool? ReplacementWithoutReceivedDamageComponent { get; set; }
    public string? RejectionReason { get; set; }
    public DateTime CreatedAt { get; set; }
    public DamageComponentShippingBy? DamageItemShippingBy { get; set; }
    public ShippingBy? ReplacementItemShippingMethod { get; set; }
    public Address? PickUpAddress { get; set; } // Address from where damage component will receive
    public Address? DeliveryAddress { get; set; } // Address where repair or replaced component will send
    public string? Notes { get; set; }
    public string? LogUsername { get; set; }
    public DateTime LogDts { get; set; } = DateTime.UtcNow;
    public bool IsInvoicePresentInTheSystem { get; set; } = false;
    }
    public class WarrantyDetailInfo : WarrantyClaim
    {
    public string? ClaimDealerName { get; set; }
    public string? ClaimDealerCode { get; set; }
    public string? AssignedDealerName { get; set; }
    public string? AssignedDealerCode { get; set; }
    public List<ClaimMapping>? ClaimMappingDetails { get; set; }
    public List<StatusWithProcessDate> TrackWarrantyStatus { get; set; } = new List<StatusWithProcessDate>();
    }
    public record WarrantyUpdateRecord
    {
    public required Guid ClaimId { get; init; }
    public WarrantyStatus? CurrentStatus { get; set; }
    public bool? ReplacementWithoutReceivedDamageComponent { get; set; }
    public string? RejectionReason { get; set; }
    public DamageComponentShippingBy? DamageItemShippingBy { get; init; }
    public Address? PickUpAddress { get; init; } // Address from where damage component will receive
    public ShippingBy? ReplacementItemShippingMethod { get; init; }
    public Address? DeliveryAddress { get; init; } // Address where repair or replaced component will send
    public string? Notes { get; init; }
    public string? LogUsername { get; set; }
    public DateTime LogDts { get; set; } = DateTime.UtcNow;
    public List<UpdateComponentDetailsRecord>? Components { get; set; }
    }
    public record UpdateComponentDetailsRecord
    {
    //public Guid? ClaimId { get; set; }
    public required string ComponentNumber { get; init; }
    public required ComponentType ComponentType { get; init; }
    public bool? IsBatteryChecked { get; init; } // Is Battery Checked
    public decimal? BatteryVoltageReading { get; init; } // Battery Voltage Reading
    public List<ImageInfo>? Attachments { get; set; }
    }
    public record StatusWithProcessDate
    {
    public WarrantyStatus Status { get; init; }
    public DateTime ProcessDate { get; init; }
    }
    public record WarrantyStateLog
    {
    public Guid TransactionId { get; init; }
    public Guid ClaimId { get; init; }
    public WarrantyStatus? WarrantyStatus { get; set; }
    public DateTime ProcessDate { get; init; } = DateTime.UtcNow;
    public bool IsMailSend { get; init; } = false;
    public string? LogUserName { get; set; }
    public DateTime LogDTS { get; init; } = DateTime.UtcNow;
    }
    public record WarrantyMinimalInfo
    {
    public string? WarrantyTicketNumber { get; set; }
    public Guid ClaimId { get; set; }
    public Guid ClaimFor { get; set; } // Dealer who claimed
    public string? ClaimDealerName { get; set; }
    public string? ClaimDealerCode { get; set; }
    public Guid AssignedTo { get; set; } // Assigned dealer
    public string? AssignedDealerName { get; set; }
    public string? AssignedDealerCode { get; set; }
    public string? InvoiceNumber { get; set; }
    public List<string>? ComponentNumber { get; set; }
    [JsonIgnore]
    public string[]? ComponentNumbers { get; init; }
    public ComponentType? ComponentType { get; init; }
    public WarrantyStatus? CurrentStatus { get; set; }
    public DateTime? CreatedAt { get; set; }
    public DamageComponentShippingBy? DamageItemShippingBy { get; set; }
    public ShippingBy? ReplacementItemShippingMethod { get; set; }
    [System.Text.Json.Serialization.JsonIgnore]
    [Newtonsoft.Json.JsonIgnore]
    public int TotalNumber { get; init; }
    }
    public record WarrantyFilter
    {
    public Guid? ClaimId { get; init; }
    public List<Guid>? ClaimFor { get; set; } // Dealer who claimed
    public Guid? AssignedTo { get; set; }
    public string? InvoiceNumber { get; init; }
    public string? WarrantyTicketNumber { get; init; }
    public List<WarrantyStatus>? Status { get; init; }
    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }
    public string? ComponentNumber { get; init; }
    public ComponentType? ComponentType { get; init; }
    public int RowsPerPage { get; set; }
    public int PageNumber { get; set; }
    public bool IsExcel { get; init; } = false;
    }
    public record ClaimedComponentDetails
    {
    public Guid? Id { get; set; }
    public Guid? ClaimId { get; set; }
    public required string ComponentNumber { get; init; }
    public required ComponentType ComponentType { get; init; }
    public string? Model { get; set; }
    public string? Color { get; set; }
    public List<AdditionalInfo>? AdditionalInfo { get; set; }
    [JsonIgnore]
    public string? AdditionalInfoAsString { get; set; }
    public string? Brand { get; set; }
    public string? DamageDetails { get; init; }
    public string? LogUsername { get; set; } // Username of the person who logged this record
    public DateTime LogDts { get; set; } = DateTime.UtcNow; // Log timestamp
    public bool IsBatteryChecked { get; set; } = false; // Is Battery Checked
    public decimal BatteryVoltageReading { get; set; } = 0; // Battery Voltage Reading
    [JsonIgnore]
    public string? AttachmentsAsString { get; set; }
    public List<ImageInfo>? Attachments { get; set; } = [];
    }
    public record ComponentsInvoiceHistoryRequest
    {
    public required List<string> ComponentNumbers { get; set; }
    public required ComponentType ComponentType { get; set; }
    public required Guid ClaimFor { get; set; }
    }
    public record ComponentsInvoiceHistory
    {
    public List<ComponentPurchaseInfoResponse>? ComponentsPurchaseInfo { get; set; }
    public bool IsInvoicePresentInTheSystem { get; set; } = false;
    }
    public record ComponentsInvoiceHistoryRequest
    {
    public required List<string> ComponentNumbers { get; set; }
    public required ComponentType ComponentType { get; set; }
    public required Guid ClaimFor { get; set; }
    }
    public record ComponentPurchaseInfoResponse
    {
    public string? ComponentNumber { get; init; }
    public ComponentType ComponentType { get; init; }
    public string? Model { get; init; }
    public string? Colour { get; init; }
    public List<AdditionalInfo>? AdditionalInfo { get; set; }
    public string? Brand { get; init; }
    public List<InvoiceHistory> InvoiceHistories { get; set; } = [];
    }
    public record DamageComponentReceipt
    {
    public Guid Id { get; set; }
    public Guid ClaimId { get; set; } // Foreign Key tblWarrantyClaims
    public bool PhysicallyReceivedAtPlant { get; init; } // Indicates physical receipt status
    public string? ReceivedBy { get; init; } // Person who received the item
    public DateTime ReceivedDate { get; init; } // Date of receipt
    public string? SecurityInwardRegisterNo { get; init; } // Security inward register number
    public DamageComponentShippingBy? DamageItemShippingBy { get; set; } // Process description for damaged item sent
    public string? CourierName { get; init; } // Name of the courier service
    public string? CourierReceiptNumber { get; init; } // Courier receipt number
    public string? TruckNumber { get; init; } // Truck number used for transportation
    public string? DriverName { get; init; } // Driver's name
    public string? DriverContact { get; init; } // Driver's contact number
    public string? Notes { get; init; }
    public string? LogUsername { get; set; } // Username of the person who logged this record
    public DateTime LogDts { get; set; } = DateTime.UtcNow; // Log timestamp
    public _OperationType OperationType { get; init; } = _OperationType.Insert;
    }
    public record InspectionInitiationRecord
    {
    public _OperationType OperationType { get; init; } = _OperationType.Insert;
    public Guid InspectionId { get; init; }
    public Guid ClaimId { get; set; }
    public DateTime HandOverDate { get; set; } // Date when the component was handed over
    public string? HandOverTo { get; init; } // Name of the person or entity the component was handed over to
    public string? InspectionFormNumber { get; init; } // Unique form number for inspection
    public string? Notes { get; init; } // Additional remarks or comments
    public string? LogUsername { get; set; }
    public DateTime LogDts { get; set; } = DateTime.UtcNow;
    }
    public record ActionRecommendedForComponent
    {
    public Guid ClaimId { get; set; }
    public required string ComponentNumber { get; init; }
    public required ComponentType ComponentType { get; init; }
    public required ActionForWarranty Action { get; init; }
    public string? Notes { get; init; } // Additional remarks or comments
    public DateTime? ConditionReportingDate { get; set; }
    }
    public record ActionTakenForComponent : ActionRecommendedForComponent
    {
    public string? SanctionedBy { get; init; }
    public string? NewComponentNumber { get; set; } // New component number (if replaced)
    public string? ReasonForAction { get; init; } // Reason for the action taken
    }
    public record ShippingDetailsRecord
    {
    public Guid ClaimId { get; set; }
    public ShippingBy ShippingMethod { get; init; } // Method of shipping (e.g., Seller, Dealer, Courier).
    public Address? DeliveryAddress { get; init; } // Address where the item will be shipped.
    public DateTime LogDTS { get; init; } // Date and time when shipping was confirmed.
    public string? LogUserName { get; set; }
    }
    public record WarrantyDispatchDetails : DeliveryInformation
    {
    public _OperationType OperationType { get; init; } = _OperationType.Insert;
    public Guid DispatchId { get; set; }
    public Guid ClaimId { get; set; }
    public DateTime DispatchDate { get; init; }
    public string? CourierName { get; init; } // Name of the courier service (optional for truck-based).
    public string? CourierReceiptNumber { get; init; } // Receipt number of the courier (if applicable).
    }
    public class InvoiceMinimalData // Updated
    {
    [XLColumn(Ignore = true)]
    public Guid InvoiceId { get; set; }
    [XLColumn(Header = "Invoice Number")]
    public string? InvoiceNumber { get; set; }
    [XLColumn(Header = "Order Number")]
    public string? OrderNumber { get; set; } // Added
    [XLColumn(Header = "Warranty Ticket Number")]
    public string? WarrantyTicketNumber { get; set; } // Added
    [XLColumn(Header = "Dealership Type")]
    public InvoicePartyType PartyType { get; set; }
    [XLColumn(Header = "Invoice Date")]
    public DateTime InvoiceDate { get; set; }
    [XLColumn(Header = "Billing Type")]
    public BillingType BillingType { get; set; }
    [XLColumn(Header = "Payment Status")]
    public InvoicePaymentStatus PaymentStatus { get; set; }
    [XLColumn(Header = "Invoice Type")]
    public InvoiceType InvoiceType { get; set; }
    [XLColumn(Header = "Total Amount")]
    public decimal TotalAmount { get; set; }
    [XLColumn(Header = "CGST Amount")]
    public decimal CGSTAmount { get; set; }
    [XLColumn(Header = "SGST Amount")]
    public decimal SGSTAmount { get; set; }
    [XLColumn(Header = "IGST Amount")]
    public decimal IGSTAmount { get; set; }
    [XLColumn(Header = "Total Amount With Tax")]
    public decimal TotalAmountWithTax { get; set; }
    [XLColumn(Header = "Round Off")]
    public decimal? RoundOff { get; set; }
    [XLColumn(Header = "Buyer Name")]
    public string? BuyerName { get; set; }
    [XLColumn(Header = "Seller Name")]
    public string? SellerName { get; set; }
    [XLColumn(Header = "IRN Applicable Status")]
    public bool? IsIrnApplicable { get; set; } = false;
    [XLColumn(Header = "E-Way Bill Applicable Status")]
    public bool? IsEwaybillApplicable { get; set; } = false;
    }

    public class InvoiceMaster //updated
    {
    public Guid InvoiceId { get; set; }
    public string? InvoiceNumber { get; set; }
    public InvoicePartyType PartyType { get; set; }
    public DateTime InvoiceDate { get; set; }
    public BillingType BillingType { get; set; }
    public InvoicePaymentStatus PaymentStatus { get; set; }
    public decimal? PendingAmount { get; set; }
    public decimal? PaymentAmount { get; set; }
    public InvoiceType Type { get; set; }
    public decimal TotalAmount { get; set; }
    public decimal? CGSTAmount { get; set; }
    public decimal? SGSTAmount { get; set; }
    public decimal? IGSTAmount { get; set; }
    public decimal TotalAmountWithTax { get; set; }
    [Required]
    public Address BillingAddress { get; set; } = new Address();
    [Required]
    public Address ShippingAddress { get; set; } = new Address();
    public bool IsCancellation { get; set; }
    public string? ReasonsForInvoiceCancellation { get; set; }
    public DateTime? DueDate { get; set; }
    public bool? SentStatus { get; set; }
    public DateTime LogDts { get; set; } = DateTime.UtcNow;
    public string? LogUserName { get; set; }
    public Guid? LogUserId { get; set; }
    public string? Notes { get; set; }

    [Required]
    public List<InvoiceItemDetails> ItemDetails { get; set; } = new List<InvoiceItemDetails>();
    public decimal? RoundOff { get; set; }
    public decimal? Discount { get; set; }
    public ClearTaxStatus? IRNDetails { get; set; }
    //Payment transaction only for credit note(From which payment the invoice is generated)
    public Guid? TransactionId { get; set; }
    public ClearTaxStatus? EwayDetails { get; set; }
    public Guid ClaimId { get; set; } //Add
    public string? WarrantyTicketNumber { get; set; } //Add
    }
    public class ImageInfo
    {
    public string? ImageId { get; set; }
    }
    public enum WarrantyStatus
    {
    ClaimRequested = 0, // Initial claim submission
    ClaimAccepted = 1, // Claim has been approved
    ClaimRejected = 2, // Claim has been rejected
    WaitingForDamagedComponent = 3, // Damage component receive decision has been done
    DamagedComponentReceived = 4,
    SentForInspection = 5,
    WaitingForFinalApproval = 6,
    ServiceProcessing = 7, // Replacement or repair processing
    ShippingMethodConfirmed = 8,
    Dispatched = 9,
    Delivered = 10,
    ClaimClosed = 11 // Claim has been resolved and closed
    }
    public enum DamageComponentShippingBy
    {
    ShippedByBuyer = 0, // Buyer ships the damaged component
    ShippedThroughCourier = 1, // Courier is used for shipping
    PickedUpBySeller = 2, // Seller picks up the damaged component
    NotSpecified = 99 // Default or unspecified value
    }

    public enum ShippingBy
    {
    PickedUpByBuyer = 0,
    ShippedThroughCourier = 1,
    ShippedBySeller = 2,
    NotSpecified = 99
    }

    public enum ActionForWarranty
    {
    Repair = 0, // Component will be repaired
    Replace = 1, // Component will be replaced
    Reject = 2 // Warranty claim is rejected
    }
    public enum InvoiceType
    {
    Ordered,
    Adhoc,
    DueNote,
    CreditNote,
    FOC // Added the last one
    }

  • API Interfaces:
    (Define the APIs required for this feature, including endpoints, methods, request/response formats.)

    EndpointMethodParametersResponseResponse Status CodesNotes
    api/inventory/warranty/components/invoice-historyPOSTComponentsInvoiceHistoryRequestComponentsInvoiceHistory200, 401, 404, 403, 500To get the components invoice history.
    api/inventory/warranty/claims/initiatePOSTWarrantyClaimA object with 2 properties - 1.Message 2WarrantyClaim200, 401, 404, 403, 500To initiate a warranty claim.
    api/inventory/warranty/claims/uploadPOSTIFormFileCollection filesList<ImageInfo>200, 401, 404, 403, 500To upload the attachment at the time of warranty claim.
    /api/inventory/warranty/claims/listPOSTWarrantyFilter<ServerPaginatedData<WarrantyMinimalInfo>200, 401, 404, 403, 500To fetch paginated warranty claims for tracking or management.
    /api/inventory/warranty/claims/{claimId}GETGuid claimIdWarrantyDetailInfo200, 401, 404, 403, 500To get detailed information about a specific warranty claim.
    /api/inventory/warranty/claims/updatePUTWarrantyUpdateRecordstring message200, 401, 404, 403, 500To modify or update warranty claim information & also used to update status
    /api/inventory/warranty/claims/{claimId}/received-detailsPOSTGuid claimId, DamagedComponentReceiptDamagedComponentReceipt200, 401, 404, 403, 500To add or update the receiving details of the damaged components.
    /api/inventory/warranty/claims/{claimId}/received-detailsGETGuid claimIdDamagedComponentReceipt200, 401, 404, 403, 500To get the receiving details of the damaged components.
    /api/inventory/warranty/claims/{claimId}/inspection-initiatePOSTInspectionInitiationRecordstring message200, 401, 404, 403, 500To add or update the data for sending the damaged component for inspection.
    /api/inventory/warranty/claims/{claimId}/inspection-initiateGETGuid claimIdInspectionInitiationRecord200, 401, 404, 403, 500To get the data for sending the damaged component for inspection.
    /api/inventory/warranty/claims/{claimId}/inspection-resultPOSTGuid ClaimId, List<ActionRecommendedForComponent> actions, [FromQuery] _OperationType operationType = _OperationType.Insertstring message200, 401, 404, 403, 500To add or update the data for inspection result of the claimed components.
    /api/inventory/warranty/claims/{claimId}/inspection-resultGETGuid claimIdList<ActionRecommendedForComponent>200, 401, 404, 403, 500To get the inspection result of the damaged components.
    /api/inventory/warranty/claims/{claimId}/actionPOSTGuid claimId,List<ActionTakenForComponent> actions, [FromQuery] _OperationType operationType = _OperationType.InsertWarrantyActionDetail200, 401, 404, 403, 500To add or update info about what actions taken on a warranty claim.
    /api/inventory/warranty/claims/{claimId}/action/actionsGETGuid claimIdList<ActionTakenForComponent>200, 401, 404, 403, 500To retrieve info about what actions taken on a warranty claim against the components.
    /api/inventory/warranty/claims/{claimId}/confirm-shipping-methodPOSTGuid claimId, ShippingDetailsRecord shippingDetailsstring message200, 401, 404, 403, 500To confirm the shipping procedure after the repair or replacement.
    /api/inventory/warranty/component-suggestionGET[FromQuery][Required] Guid consumerId,[FromQuery][Required]ComponentType componentTypeList<string>200, 401, 404, 403, 500Fetches a list of components which are purchased by the consumer of the given particular component type as well as eligible for claiming warranty.
    /api/inventory/warranty/dispatchPOSTGuid claimId,WarrantyDispatchDetails dispatchDetailsstring message200, 401, 404, 403, 500Save or update dispatch information for a warranty claim.
    /api/warranty/dispatchGETGuid claimIdWarrantyDispatch200, 401, 404, 403, 500Fetch dispatch information of a specific warranty replacement.

  • Third-Party Integrations:
    (List any third-party services or tools that need to be integrated.)

  • Workflow:
    Flow Chart for warranty management : Flow Chart


Development Tasks & Estimates

(Break down the development process into smaller tasks and provide time estimates for each.)

NoTask NameEstimate (Hours)DependenciesNotes
1Define Workflow & Planing for Warranty Management10 hrsEstablish the overall workflow for the warranty management system, covering all stages, including claims initiation, inspection, replacement, repair, and delivery. Outline the sequence of actions and interdependencies.
2Screen Planing Warranty Management10 hrsDefine and plan the UI screens required for warranty management, such as claim initiation, inspection updates, dispatch, and delivery tracking.
3Documentation for Warranty Management4 hours
4Model Creation for Warranty Management2 hoursDefine and create models required for the warranty management APIs, ensuring compatibility with the planned workflows and database schema.
5Database Schema Finalization2 hoursFinalize the database schema for warranty management
6/api/warranty/claims/initiate API6 hrsCreate API for initiating warranty claims.
7Backend Testing for /api/warranty/claims/initiate API2 hrsTesting for API of initiating warranty claims.
8/api/warranty/claims/list API6 hrsCreate API for listing warranty claims with pagination.
9Backend Testing for /api/warranty/claims/list API2 hrsTesting for API of listing warranty claims with pagination.
10/api/warranty/claims/{claimId}/receive-details POST API5 hrsCreate API to add or update receiving details of damaged components.
11Backend Testing for /api/warranty/claims/{claimId}/receive-details POST API1.5 hrsCreate API to add or update receiving details of damaged components.
12/api/warranty/claims/{claimId}/receive-details GET API5 hrsCreate API to fetch receiving details of damaged components.
13Backend Testing for /api/warranty/claims/{claimId}/receive-details GET API1 hrsTesting for API to fetch receiving details of damaged components.
14/api/warranty/claims/{claimId}/inspection-initiate POST API5 hrsCreate API to add or update data for sending component for inspection.
15Backend Testing for /api/warranty/claims/{claimId}/inspection-initiate POST API1 hrsTesting for API to add or update data for sending component for inspection.
16/api/warranty/claims/{claimId}/inspection-initiate GET API4 hrsCreate API to retrieve inspection initiation data.
17Backend Testing for /api/warranty/claims/{claimId}/inspection-initiate GET API1 hrsTesting for API to retrieve inspection initiation data.
18/api/warranty/claims/{claimId}/inspection-result POST API4 hrsCreate API to add or update inspection result data.
19Backend Testing for /api/warranty/claims/{claimId}/inspection-result POST API1 hrsTesting for API to add or update inspection result data.
20/api/warranty/claims/{claimId}/inspection-result GET API4 hrsCreate API to retrieve inspection result data.
21Backend Testing for /api/warranty/claims/{claimId}/inspection-result GET API1 hrsBackend testing for API to retrieve inspection result data.
22/api/warranty/claims/{claimId}/actions POST API6 hrsCreate API to add or update action taken on warranty claims.
23Backend Testing for /api/warranty/claims/{claimId}/actions API2 hrsBackend testing for API to add or update action taken on warranty claims.
24/api/warranty/claims/{claimId}/foc-invoice-pdf API8 hrsCreate API to generate FOC invoice PDF for warranty claim.
25Backend testing for /api/warranty/claims/{claimId}/foc-invoice-pdf API3 hrsTesting for API to generate FOC invoice PDF for warranty claim.
26/api/warranty/components-suggestions API8 hrsCreate an API to fetch all components from an invoice that are eligible for warranty claims. Components should not already be claimed for warranty or returned through a credit note invoice.
27Backend testing for /api/warranty/components-suggestions API2 hrsTesting to ensure the API fetches only eligible components for warranty claims and provides accurate suggestions.
28/api/warranty/component-purchase-info API8 hrsFetch detailed purchase information for the claimed component.
29Backend Testing for /api/warranty/component-purchase-info API2 hrsFetch detailed purchase information for any component.
30/api/warranty/dispatch POST API5 hrsAdd or update dispatch info for any particular warranty.
31Backend Testing /api/warranty/dispatch API1 hrsTest the API to ensure it handles delivery scenarios for warranty items, order items, and combined deliveries. Verify support for cases where both warranty and order items are dispatched together in one delivery process.
32/api/warranty/dispatch GET API4 hrsGet the warranty dispatch details.
33Backend Testing /api/warranty/dispatch API1 hrsTest the API to verify accurate retrieval of delivery information.
34/api/warranty/send-otp API6 hrsAPI to handle OTP generation and send otp to the buyer at the time of warranty dispatch.
35Backend Testing /api/warranty/send-otp API2 hrsTest the API to handle OTP generation and send otp to the buyer at the time of warranty dispatch.
36/api/warranty/verify/otp API3.5 hrsAPI to verify OTP just before warranty item delivered.
37Backend Testing /api/warranty/verify/otp API1 hrsTest the API of verify OTP.
38/api/warranty/dispatch/list API6 hrsGet paginated list of warranty (with their minimal dispatch) info which is already dispatched.
39Backend Testing of /api/warranty/dispatch/list API2 hrsTest the Get paginated list of warranty API.
40Generate FOC Invoice after Replacement or Repair6 hrsGenerate FOC Invoice after Replacement or Repair
41Update /api/payment/invoice/get/invoice/receivedorder API4 hrsModify the API to show order number and warranty ticket number in the invoice paginated call.
42Backend Testing /api/payment/invoice/get/invoice/receivedorder API1 hrTest the updated /api/payment/invoice/get/invoice/receivedorder API.
43Update /api/payment/invoice/get/invoicedetails API3 hrsShow warranty brief details such as warranty ticket number and warranty claim date in the response.
44Backend Testing /api/payment/invoice/get/invoicedetails API1 hrTest the updated /api/payment/invoice/get/invoicedetails API to ensure correct data retrieval.
45Update /api/payment/invoice/invoice/generate/b2b API3 hrsIn case of warranty, set InvoiceType to "FOC" and save WarrantyClaimId.
46Backend Testing /api/payment/invoice/invoice/generate/b2b API1 hrTest the updated /api/payment/invoice/invoice/generate/b2b API to ensure correct handling of FOC invoices.
47Generate Warranty Ticket Number in a Particular Pattern3 hrsImplement the logic to generate warranty ticket numbers following a specific pattern.
48Change Naming Pattern for FOC Invoice2 hrsUpdate the naming pattern for FOC invoices to reflect changes in the system.
49Update Invoice PDF Design for FOC Invoice3 hrsModify the invoice PDF design to include relevant information for FOC invoices.
50Testing for FOC Invoice PDF2 hrsModify the invoice PDF design to include relevant information for FOC invoices.
51Mail Send to Both Buyer and Seller at the Time of Warranty Claim2 hrsSend an email to both the buyer and seller when a warranty claim is made.
52Mail Send to Both Buyer and Seller at the Time of Warranty Approval2 hrsSend an email to both the buyer and seller when the warranty claim is approved.
53Mail Send to Both Buyer and Seller at the Time of Warranty Rejection2 hrsSend an email to both the buyer and seller when the warranty claim is rejected.
54Mail Send to Both Buyer and Seller at the Time of Damage Item Receipt2 hrsSend an email to both the buyer and seller when the damaged item is received for warranty processing.
55Mail Send to Both Buyer and Seller at the Time of Replacement or Repair Item Dispatch2 hrsSend an email to both the buyer and seller when the replacement or repair item is dispatched.
56Mail Send to Both Buyer and Seller at the Time of OTP Sent After Dispatch2 hrsSend an email to both the buyer and seller when the OTP is sent after dispatch.
57Mail Send to Both Buyer and Seller at the Time of OTP Verification2 hrsSend an email to both the buyer and seller when OTP verification is completed.
58Mail Send to Both Buyer and Seller at the Time of OTP Delivered2 hrsSend an email to both the buyer and seller when the OTP is successfully delivered.
59Create Mail HTML Template for Warranty8 hrsCreate a new HTML email template for warranty notifications and processes.
60/api/warranty/claims/{claimId}/actions GET API5 hrsCreate API to retrieve action taken on warranty claims.
61Backend Testing for /api/warranty/claims/{claimId}/actions API1 hrsBackend testing for API to retrieve action taken on warranty claims.
62/api/warranty/claims-details GET API5 hrsAPI to retrieve details of a warranty claim.
63Backend Testing for /api/warranty/claims-details GET API1 hrsBackend testing for API to retrieve details of a warranty claim.
64/api/warranty/claims/update POST API5 hrsAPI to update a warranty claim.
65Backend Testing for /api/warranty/claims/update POST API1 hrsBackend testing for API to update a warranty
66Claim warranty page UI12 hrs
67Claim warranty page API integration3 hrs
68My warranty list UI3 hrs
69My warranty list API integration2 hrs
70My warranty filter2 hrs
71Received warranty list UI3 hrs
72Received warranty filter4 hrs
73Warranty track UI14 hrs
74Received warranty list api integration3 hrs
75Warranty approve reject UI2 hrs
76Add received details UI2 hrs
77Available for dispatch list UI4 hrs
78Available for dispatch list api integration3 hrs
79Ready to dispatch page UI4 hrs
80Ready to dispatch list api integration3 hrs
81Quality check page UI4 hrs
82Quality check details add api integration4 hrs
83Repair replace page UI4 hrs
84Repair replace info add UI4 hrs
85Repair detail view2 hrs
86Quality check detail view2 hrs
Total303 hours

Testing & Quality Assurance

(Outline the testing strategy and quality assurance measures for the feature.)

  • Unit Tests:
    (List the unit tests that will be written for this feature.)

  • Integration Tests:
    (Describe how integration testing will be conducted.)

  • Acceptance Criteria:
    (Define the criteria that must be met for the feature to be considered complete.)

  • Testing Tools:
    (List any tools that will be used for testing.)


Deployment Considerations

(Describe any deployment considerations, including environment configurations, feature toggles, or migration steps.)

  • Configuration Changes:
    (Detail any configuration changes required for this feature.)


    CREATE TABLE IF NOT EXISTS public.tblwarrantyclaims
    (
    claimid uuid NOT NULL,
    claimfor uuid NOT NULL,
    assignedto uuid NOT NULL,
    claiminitiatedbyconsumerid uuid NOT NULL,
    claiminitiateby text COLLATE pg_catalog."default",
    invoicenumber character varying(100) COLLATE pg_catalog."default",
    invoicedate timestamp with time zone,
    warrantyticketnumber text COLLATE pg_catalog."default" NOT NULL,
    currentstatus character varying(100) COLLATE pg_catalog."default",
    damageitemshippingby character varying(100) COLLATE pg_catalog."default",
    replacementwithoutreceiveddamagecomponent boolean,
    rejectionreason text COLLATE pg_catalog."default",
    createdat timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
    focinvoicenumber character varying(100) COLLATE pg_catalog."default",
    focinvoiceid uuid,
    pickupaddress jsonb,
    deliveryaddress jsonb,
    notes text COLLATE pg_catalog."default",
    logusername text COLLATE pg_catalog."default",
    logdts timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
    replacementitemshippingmethod character varying(100) COLLATE pg_catalog."default",
    componenttype text COLLATE pg_catalog."default",
    componentnumbers text[] COLLATE pg_catalog."default",
    CONSTRAINT tblwarrantyclaims_pkey PRIMARY KEY (claimid),
    CONSTRAINT tblwarrantyclaims_warrantyticketnumber_key UNIQUE (warrantyticketnumber)
    );
    CREATE TABLE IF NOT EXISTS public.tblclaimedcomponentdetails
    (
    componentid uuid NOT NULL,
    claimid uuid,
    componentnumber text COLLATE pg_catalog."default",
    componenttype character varying(100) COLLATE pg_catalog."default",
    model text COLLATE pg_catalog."default",
    color text COLLATE pg_catalog."default",
    brand text COLLATE pg_catalog."default",
    additionalinfo jsonb,
    damagedetails text COLLATE pg_catalog."default",
    logusername text COLLATE pg_catalog."default",
    logdts timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
    isbatterychecked boolean NOT NULL DEFAULT false,
    batteryvoltagereading numeric NOT NULL DEFAULT 0,
    attachments jsonb,
    CONSTRAINT tblclaimedcomponentdetails_pkey PRIMARY KEY (componentid)
    );
    CREATE TABLE IF NOT EXISTS public.tblwarrantystatelog
    (
    transactionid uuid NOT NULL,
    claimid uuid,
    statename character varying(100) COLLATE pg_catalog."default" NOT NULL,
    processdate timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
    ismailsend boolean DEFAULT false,
    logusername character varying(100) COLLATE pg_catalog."default" NOT NULL,
    logdts timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT tblwarrantystatelog_pkey PRIMARY KEY (transactionid)
    );
    CREATE TABLE IF NOT EXISTS public.tbldamagedcomponentreceipts
    (
    id uuid NOT NULL,
    claimid uuid,
    physicallyreceivedatplant boolean,
    receivedby character varying(100) COLLATE pg_catalog."default",
    receiveddate timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
    securityinwardregisterno text COLLATE pg_catalog."default",
    damageitemshippingby text COLLATE pg_catalog."default",
    couriername text COLLATE pg_catalog."default",
    courierreceiptnumber text COLLATE pg_catalog."default",
    trucknumber character varying(50) COLLATE pg_catalog."default",
    drivername character varying(100) COLLATE pg_catalog."default",
    drivercontact character varying(50) COLLATE pg_catalog."default",
    notes text COLLATE pg_catalog."default",
    logusername text COLLATE pg_catalog."default",
    logdts timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT tbldamagedcomponentreceipts_pkey PRIMARY KEY (id)
    );
    CREATE TABLE IF NOT EXISTS public.tblinspectioninitiation
    (
    inspectionid uuid NOT NULL,
    claimid uuid NOT NULL,
    handoverdate timestamp without time zone NOT NULL,
    handoverto character varying(100) COLLATE pg_catalog."default",
    inspectionformnumber character varying(100) COLLATE pg_catalog."default",
    notes text COLLATE pg_catalog."default",
    logusername character varying(100) COLLATE pg_catalog."default",
    logdts timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT tblinspectioninitiation_pkey PRIMARY KEY (inspectionid)
    );

    CREATE TABLE IF NOT EXISTS public.tblinspectionresult
    (
    id uuid NOT NULL,
    claimid uuid NOT NULL,
    conditionreportingdate timestamp without time zone,
    checkedincdc boolean NOT NULL DEFAULT false,
    actionrequired character varying(50) COLLATE pg_catalog."default",
    notes text COLLATE pg_catalog."default",
    logusername character varying(100) COLLATE pg_catalog."default",
    logdts timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
    componentnumber text COLLATE pg_catalog."default",
    componenttype text COLLATE pg_catalog."default",
    CONSTRAINT tblinspectionresult_pkey PRIMARY KEY (id),
    CONSTRAINT uq_claim_component UNIQUE (claimid, componentnumber, componenttype)
    );

    CREATE TABLE IF NOT EXISTS public.tblwarrantyactiondetails
    (
    actionid uuid NOT NULL,
    claimid uuid NOT NULL,
    action character varying(100) COLLATE pg_catalog."default" NOT NULL,
    reasonforaction text COLLATE pg_catalog."default",
    sanctionedby character varying(100) COLLATE pg_catalog."default",
    partsused jsonb,
    newcomponentnumber character varying(100) COLLATE pg_catalog."default",
    notes text COLLATE pg_catalog."default",
    logusername character varying(100) COLLATE pg_catalog."default",
    logdts timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
    componentnumber text COLLATE pg_catalog."default",
    componenttype text COLLATE pg_catalog."default",
    CONSTRAINT tblwarrantyactiondetails_pkey PRIMARY KEY (actionid),
    CONSTRAINT unique_warranty_action UNIQUE (claimid, componentnumber, componenttype)
    );

    CREATE TABLE IF NOT EXISTS public.tblwarrantydispatch
    (
    dispatchid uuid NOT NULL,
    claimid uuid NOT NULL,
    transid text COLLATE pg_catalog."default",
    transname character varying(255) COLLATE pg_catalog."default",
    transmode character varying(50) COLLATE pg_catalog."default",
    distance numeric,
    transdocno character varying(255) COLLATE pg_catalog."default",
    transdocdt timestamp without time zone,
    vehno character varying(50) COLLATE pg_catalog."default",
    vehtype character varying(50) COLLATE pg_catalog."default",
    drivername character varying(255) COLLATE pg_catalog."default",
    driverphno character varying(50) COLLATE pg_catalog."default",
    vehownership character varying(50) COLLATE pg_catalog."default",
    wheeler character varying(50) COLLATE pg_catalog."default",
    logdts timestamp without time zone NOT NULL,
    logusername character varying(255) COLLATE pg_catalog."default",
    loguserid uuid,
    consumerid uuid,
    openingkmreading numeric,
    destinationkm numeric,
    closingkmreading numeric,
    journeykm numeric,
    returnkm numeric,
    tollexpense numeric,
    facilitationexpense numeric,
    dieselrefill numeric,
    fasttagrecharge numeric,
    driverpersonalexpense numeric,
    otherexpenses numeric,
    totalexpenses numeric,
    totalfare numeric,
    cashcollected numeric,
    chequevalue numeric,
    cashcollectiondate timestamp without time zone,
    chequecollectiondate timestamp without time zone,
    totalpayableamount numeric,
    dispatchdate timestamp without time zone,
    couriername character varying(255) COLLATE pg_catalog."default",
    courierreceiptnumber character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT tblwarrantydispatch_pkey PRIMARY KEY (dispatchid)
    );

    ALTER TABLE tblinvoicemaster
    ADD COLUMN WarrantyClaimId UUID;


    ALTER TABLE tblComponentAnnexure
    ADD COLUMN IsWarrantyClaimed BOOLEAN DEFAULT FALSE;

    -- For tblinvoicemaster
    ALTER TABLE tblinvoicemaster
    ADD CONSTRAINT fk_warrantyclaimid FOREIGN KEY (WarrantyClaimId) REFERENCES tblWarrantyClaims (ClaimId) ON DELETE SET NULL;

    ALTER TABLE tblComponentAnnexure rename column conponent_no to component_no;
  • Rollout Plan:
    (Outline the plan for rolling out the feature, including any phased releases.)


Risks & Mitigations

(Identify potential risks and the strategies to mitigate them.)

RiskImpactLikelihoodMitigation Strategy
............

Review & Approval

(Include a section for review and approval by stakeholders.)

  • Reviewer:
    Abhishak Kumar Roy

  • Approval Date:
    2024-12-09


Notes
(Add any additional notes or considerations related to the feature development here.)