Giter Club home page Giter Club logo

backend-using-node.js's Introduction

Instructions

Instructions have been provided inside payroll-backend folder.

Project Description

Imagine that this is the early days and that we are prototyping a new payroll system with an early partner. Our partner is going to use our web app to determine how much each employee should be paid in each pay period, so it is critical that we get our numbers right.

The partner in question only pays its employees by the hour (there are no salaried employees.) Employees belong to one of two job groups which determine their wages; job group A is paid $20/hr, and job group B is paid $30/hr. Each employee is identified by a string called an "employee id" that is globally unique in their system.

Hours are tracked per employee, per day in comma-separated value files (CSV). Each individual CSV file is known as a "time report", and will contain:

  1. A header, denoting the columns in the sheet (date, hours worked, employee id, job group)
  2. 0 or more data rows
  3. A footer row where the first cell contains the string report id, and the second cell contains a unique identifier for this report.

Our partner has guaranteed that:

  1. Columns will always be in that order.
  2. There will always be data in each column.
  3. There will always be a well-formed header line.
  4. There will always be a well-formed footer line.

An example input file named sample.csv is included in this repo.

What your web-based application must do:

We've agreed to build the following web-based prototype for our partner.

  1. Your app must accept (via a form) a comma separated file with the schema described in the previous section.
  2. Your app must parse the given file, and store the timekeeping information in a relational database for archival reasons.
  3. After upload, your application should display a payroll report. This report should also be accessible to the user without them having to upload a file first.
  4. If an attempt is made to upload two files with the same report id, the second upload should fail with an error message indicating that this is not allowed.

The payroll report should be structured as follows:

  1. There should be 3 columns in the report: Employee Id, Pay Period, Amount Paid
  2. A Pay Period is a date interval that is roughly biweekly. Each month has two pay periods; the first half is from the 1st to the 15th inclusive, and the second half is from the 16th to the end of the month, inclusive.
  3. Each employee should have a single row in the report for each pay period that they have recorded hours worked. The Amount Paid should be reported as the sum of the hours worked in that pay period multiplied by the hourly rate for their job group.
  4. If an employee was not paid in a specific pay period, there should not be a row for that employee + pay period combination in the report.
  5. The report should be sorted in some sensical order (e.g. sorted by employee id and then pay period start.)
  6. The report should be based on all of the data across all of the uploaded time reports, for all time.

As an example, a sample file with the following data:

date hours worked employee id job group
4/11/2016 10 1 A
14/11/2016 5 1 A
20/11/2016 3 2 B

should produce the following payroll report:

Employee ID Pay Period Amount Paid
1 1/11/2016 - 15/11/2016 $300.00
2 16/11/2016 - 30/11/2016 $90.00

backend-using-node.js's People

Contributors

aghull avatar igauravsehrawat avatar jimgraham avatar michaeldibernardo avatar wvchallenges avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

backend-using-node.js's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.