{"id":13819475,"url":"https://github.com/anastassia-b/bill-process","last_synced_at":"2025-04-23T23:16:17.707Z","repository":{"id":29757871,"uuid":"120125765","full_name":"anastassia-b/bill-process","owner":"anastassia-b","description":"Fullstack bill processing app-- enables various account types to collaborate on bill actions before it is sent to a customer. Rails, PostgreSQL, React/Redux","archived":false,"fork":false,"pushed_at":"2023-01-19T06:31:59.000Z","size":494,"stargazers_count":7,"open_issues_count":16,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-23T23:16:11.883Z","etag":null,"topics":["postgresql","react-redux","ruby-on-rails","single-page-app"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anastassia-b.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-03T20:11:46.000Z","updated_at":"2023-08-14T14:27:02.000Z","dependencies_parsed_at":"2023-02-10T21:01:25.192Z","dependency_job_id":null,"html_url":"https://github.com/anastassia-b/bill-process","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anastassia-b%2Fbill-process","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anastassia-b%2Fbill-process/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anastassia-b%2Fbill-process/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anastassia-b%2Fbill-process/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anastassia-b","download_url":"https://codeload.github.com/anastassia-b/bill-process/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250528900,"owners_count":21445519,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["postgresql","react-redux","ruby-on-rails","single-page-app"],"created_at":"2024-08-04T08:00:48.848Z","updated_at":"2025-04-23T23:16:17.684Z","avatar_url":"https://github.com/anastassia-b.png","language":"Ruby","funding_links":[],"categories":["Happy Exploring 🤘"],"sub_categories":[],"readme":"# BillProcess\n\nBillProcess is a full-stack app that lets different internal stakeholders efficiently process monthly customer bills. It is built with Ruby on Rails, PostgreSQL, and React/Redux.\n\nLive demo found here!\nhttp://billprocess.herokuapp.com/\n\nAlternatively, to run this app locally:\n  * `git clone https://github.com/anastassia-b/bill-process.git`\n  * `bundle install`\n  * `npm install`\n  * `rails db:setup`\n  * `rails s`\n  * Visit `localhost:3000/#/welcome` in your browser!\n\n## Features\n* Complete user authentication with BCrypt gem.\n* Multiple Account types (Finance, Customer Success, Sales) allow for specialized permissions and views.\n  * Finance users can generate bills and sent them to customers.\n  * CustomerSuccess and Sales can approve and reject bills.\n* Bill tracks the history of actions on it, allowing for documentation and reversibility.\n\n## Database Schema\n\n### Users (stakeholders)\ncolumn name     | data type | details\n----------------|-----------|-----------------------\nid              | integer   | not null, primary key\nname            | string    | not null, indexed, unique\nemail           | string    |\nrole            | string    | not null\npassword_digest | string    | not null\nsession_token   | string    | not null, indexed, unique\n\nImplemented Roles: \"Finance\", \"Customer Success\", \"Sales\"\n\n### Customers\n\ncolumn name     | data type | details\n----------------|-----------|-----------------------\nid              | integer   | not null, primary key\ncsm_id    | integer | foreign key (references users), indexed\nname            | string    |\nbilling_address | string    |  \nbilling_email   | string    |\nmonthly_api_limit | integer   |\noverage_unit_cost  | float |\nstart_date | date |\nend_date | date |\nrequire_csm_approval | boolean |\n\n\n### Usage\n\ncolumn name     | data type | details\n----------------|-----------|-----------------------\nid              | integer   | not null, primary key\ncustomer_id     | integer   | not null, foreign key (references customers), indexed\nmonth           | integer   |\nyear            | integer   |\napi_usage       | integer   |\n\n### Bill\n\ncolumn name     | data type | details\n----------------|-----------|-----------------------\nid              | integer   | not null, primary key\ncustomer_id    | integer   | not null, foreign key (references customers), indexed\nmonth           | integer   |\nyear            | integer   |\noverage_units   | integer   |\noverage_unit_cost  | integer |\noverage_amount  | integer |\nstatus      | string   |\ncreated_at  | datetime |\nupdated_at  | datetime |\n\nA bill's overage_unit cost by default will be a customer's overage_unit_cost, but could be altered for flexibility. Therefore, overage_unit_cost is stored in two models.\n\n### Bill Actions\ncolumn name     | data type | details\n----------------|-----------|-----------------------\nid              | integer   | not null, primary key\nbill_id         | integer   | not null, foreign key (references bills), indexed\nstakeholder_id  | integer   | not null, foreign key (references users), indexed\naction          | string    |\ncomment         | string    |\ncreated_at      | datetime  | not null\nupdated_at      | datetime  | not null\n\n## Routes\n\n### HTML API\n\n* `GET /` - loads React web app\n\n### JSON API\n\n#### User\n\n* `GET /api/users/:userId`\n* `POST /api/users`\n\n#### Session\n\n* `POST /api/session`\n* `DELETE /api/session`\n\n#### Customer\n\n* `GET /api/customers`\n* `GET /api/customers/:customerId`\n\n#### Usage\n\n* `GET /api/usage`\n(Pass customerId, etc as parameters. Not using this route on frontend currently.)\n\n#### Bill\n* `GET /api/bills`\n* `GET /api/bills/:billId`\n* `POST /api/bills/`\n* `PATCH  /api/bills/:id/approve`\n* `PATCH  /api/bills/:id/reject`\n\nCreating or updating a bill create BillActions which log the activity.\n\n### Frontend Routes\n\n* `/welcome` - Login and Signup Page\n* `/dashboard` - Main Dashboard with Overage Bill Index\n* `/bills/:id` - Bill Show Page\n* `/customers` - Customer Index\n* `/customers/:id` - Customer Show Page with Usage\n\n\n### Future Implementation\n* Error handling tied to thunk actions\n* Testing\n\nNote: Currently an assumption is that either Sales or CustomerSuccess can approve a bill. Future implementation will ensure that a bill passes through a 2-step approval system if it needs to.\n\n### Screenshots\n\n![welcome](/app/assets/images/welcome.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanastassia-b%2Fbill-process","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanastassia-b%2Fbill-process","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanastassia-b%2Fbill-process/lists"}