Please read this document carefully from beginning to end. The purpose of this test is to assess your technical programming skills. The challenge consists of parsing this text file (https://github.com/ByCodersTec/desafio-ruby-on-rails/blob/master/CNAB.txt) and saving its information (financial transactions) into a database of your choice. This challenge should be completed by you at home. Take as much time as you need, but usually you shouldn't need more than a few hours.
- First, fork this project to your Github account (create one if you don't have it).
- Implement the project as described below in your local clone.
- Send the project or the fork/link to your ByCoders contact with a copy to rh@bycoders.com.br.
You received a CNAB file with financial transaction data from several stores. We need to create a way for this data to be imported into a database. Your task is to create a web interface that accepts uploads of the CNAB file (https://github.com/ByCodersTec/desafio-ruby-on-rails/blob/master/CNAB.txt), normalizes the data, stores it in a relational database, and displays this information on the screen.
Your web application MUST:
-
Have a screen (via a form) to upload the file
Extra points if you don't use a popular CSS framework. -
Parse the received file, normalize the data, and correctly save it in a relational database
(Pay attention to the CNAB documentation below.) -
Display a list of imported operations by store, including a total account balance
-
Be written in your preferred programming language
-
Be simple to configure and run in a Unix-based system (Linux or macOS)
(Use only free/open-source languages and libraries.) -
Use Git with atomic and well-described commits
-
Use PostgreSQL, MySQL, or SQL Server
-
Have automated tests
-
Use Docker Compose
Extra points if you use it. -
Include a README describing the project and its setup
-
Include instructions describing how to consume the API endpoint
-
Handle authentication or authorization
Extra points if implemented; even more if OAuth. -
Document the API
Optional --- but earns extra points.
| Field | Start | End | Size | Description |
|---|---|---|---|---|
| Type | 1 | 1 | 1 | Transaction type |
| Date | 2 | 9 | 8 | Date of occurrence |
| Value | 10 | 19 | 10 | Transaction amount (divide by 100.00) |
| CPF | 20 | 30 | 11 | Beneficiary's CPF |
| Card | 31 | 42 | 12 | Card used in the transaction |
| Time | 43 | 48 | 6 | Time of occurrence (UTC-3) |
| Store Owner | 49 | 62 | 14 | Store representative name |
| Store Name | 63 | 81 | 19 | Store name |
| Type | Description | Nature | Sign |
|---|---|---|---|
| 1 | Debit | Income | + |
| 2 | Boleto | Expense | - |
| 3 | Financing | Expense | - |
| 4 | Credit | Income | + |
| 5 | Loan Receipt | Income | + |
| 6 | Sales | Income | + |
| 7 | TED Receipt | Income | + |
| 8 | DOC Receipt | Income | + |
| 9 | Rent | Expense | - |
Your project will be evaluated based on:
- Whether your application meets the basic requirements
- Documentation on environment setup and application execution
- Whether you followed the challenge submission instructions
- Quality and coverage of automated tests
We will also assess:
- Your familiarity with standard libraries
- Your experience with object-oriented programming
- The structure and maintainability of your project