Key Information

Register
Submit
The challenge is finished.

Challenge Overview

Challenge Objectives

  • Create the parser to extract the customer's bill data from the bill PDF files


Project Background

This Tool would capture the contents of the bill uploaded by customer from their previous carrier and recommend the corresponding pricing for the same configuration and highlight the benefits by switching to a new carrier. 
Additionally, the Tool would determine the current contracts and financed devices with previous carrier and calculate the Device Financed amount and Contract Termination Fees for issuing a Payout. 
This Tool would be easily scalable to capture additional information from previous bill for further analysis and helps to perform real time eligibility validation and determine payout amount instantly.


Technology Stack

  • Java 8
  • Maven
  • PDF Parser
  • Spring Framework
 

Requirements

Create a library which contains a parser to parse the bill PDF and return the parsed bill data. The library should define a parser, which exposes a public method taking a File object (representing the bill PDF file), and return the parsed bill data. It should contain a Main class, which can be executed from the CLI, taking an input file and an output directory, the Main class should pass the input file to the parser, and write the parsed bill data as JSON file into the output directory. 

For each PDF the extract data structure is like below:
Account - store the acount level data���
  • Carrier
  • Account #
  • Account tenure
  • Customer’s Name
  • Customer’s Address (with Zip code)
  • any other account level data available
Lines - store the line level data (or phone number), the PDF file may contain multiple lines. 
For each line, extract the following data:
  • lineType: Phone line, Tablet line, Wearable line, TV
  • Total Monthly Bill amount
  • Good Credit (Y/N)
  • total service charges
  • For the charges listed in the line, they have two types: service charges and the device payment. and for the service charges, they should be categorized:
    • Rate Plan Name and charges
    • Data Buckets Name and charge
    • Other Features (Like Insurance etc.)
    • Taxes and Fees
    • Access Fees for Data bucket
    • International Travel/Roaming charges/Fees
    • Recurring 3rd party monthly subscription (like Hulu etc.)
    • Bundled products (like TV charges)
    • Other Miscellaneous Charges/Fees
Devices:
for each devices, the following device payment should be captured. (the line associated with the device should also be stored)
  • Device Make and Model
  • Device Total Financed amount
  • Device Financed date (or) Tenure of financing
  • Device Amount paid so far
  • Total # of pending payments
  • Pending Payoff Device amount

To calculate the device payoff, follow the algorithm below:
The Device and Contract Fees Payoff amount is calculated by searching for the charges billed against the description listed below. 
    a) Device on Loan/EIP (Equipment Installment Plan):
    • Balance Remaining after Current installment
    • $$ Remaining after this month.
    b) Device on Lease 
    • Lease Payoff amount = (Lease Charge * Payments Remaining) + Purchase Option Price
    c) Early Termination Fees/Contract Fees:
    • $$ amount against Early Termination Fees/Contract Fees. 

To categorize the service charges, please define a configuration file with following structure:
carrier
  • category name or id
    • keywords
The idea is for the bill corresponding to specific carrier, you match the charge name with the configured keywords, and if there is a match, then the charge belongs to this category. 
You can use a similar approach to determine if it's a device payment, and then determine its type: deviceOnLoad, deviceOnLease or earlyTermination. 

Final Submission Guidelines

Submission Deliverable
  • Source Code
  • README containing deployment and verification guide

ELIGIBLE EVENTS:

Topcoder Open 2019

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30093648