|
- /* Precision for all money amounts assumes cents are excluded. */
-
- CREATE TABLE comparison (
- id INT AUTO_INCREMENT,
- PRIMARY KEY (id)
- );
-
- CREATE TABLE branch (
- id INT AUTO_INCREMENT,
- type ENUM('NMLS', 'FSRA'),
- num VARCHAR(40) NOT NULL,
- PRIMARY KEY (id)
- );
-
- CREATE TABLE user (
- id INT AUTO_INCREMENT,
- email VARCHAR(40) NOT NULL,
- first_name VARCHAR(30) NOT NULL,
- last_name VARCHAR(30) NOT NULL,
- password CHAR(64) NOT NULL,
- branch_id INT,
- /* The password should be a SHA256 hash in hex format. It's length doesn't
- * vary */
- country ENUM('Canada', 'USA'),
- title ENUM('Loan Officer',
- 'Branch Manager',
- 'Mortgage Broker',
- 'Other'),
- status ENUM('Trial',
- 'Free',
- 'Subscribed',
- 'Branch Subscribed'),
- PRIMARY KEY (`id`),
- FOREIGN KEY (branch_id) REFERENCES branch(id)
- ON DELETE SET NULL
- );
-
- CREATE TABLE license (
- id INT AUTO_INCREMENT,
- user_id INT NOT NULL,
- type ENUM('NMLS', 'FSRA'),
- num VARCHAR(40) NOT NULL,
- PRIMARY KEY (`id`),
- FOREIGN KEY (user_id) REFERENCES user(id)
- ON DELETE CASCADE
- ON UPDATE RESTRICT
- );
-
- /* Officers or managers may need to create new loan types with custom settings.
- * Types with branch_id and user_id values of null will be general cases. */
- CREATE TABLE loan_type (
- id INT AUTO_INCREMENT,
- branch_id INT,
- user_id INT,
- name VARCHAR(30),
- FOREIGN KEY (branch_id) REFERENCES branch(id),
- FOREIGN KEY (user_id) REFERENCES user(id),
- PRIMARY KEY (`id`)
- );
-
- CREATE TABLE borrower (
- id INT AUTO_INCREMENT,
- credit_score SMALLINT,
- monthly_income INT,
- num TINYINT, /* Number of people borrowing. */
- PRIMARY KEY (`id`)
- );
-
- CREATE TABLE estimate (
- id INT AUTO_INCREMENT,
- user_id INT NOT NULL,
- borrower_id INT NOT NULL,
- comparison_id INT,
- transaction ENUM('Purchase', 'Refinance'),
- loan_type_id INT NOT NULL,
- loan_amount INT NOT NULL,
- price INT NOT NULL,
- property ENUM('Single Family Detached',
- 'Single Family Attached',
- 'Condominium Lo-rise',
- 'Condominium Hi-rise'),
- pud BOOLEAN, /* Property under development */
- term INT, /* In months */
- interest INT, /* Per year, precise to 2 decimals */
- hoi INT, /* Hazard insurance annual payments */
- mi_name VARCHAR(50), /* Mortgage insurance title shown in menu */
- mi_amount INT, /* Mortgage insurance amount */
- lender VARCHAR(30),
- PRIMARY KEY (`id`),
- FOREIGN KEY (loan_type_id) REFERENCES loan_type(id)
- ON UPDATE RESTRICT,
- FOREIGN KEY (comparison_id) REFERENCES comparison(id)
- ON DELETE CASCADE
- ON UPDATE RESTRICT,
- FOREIGN KEY (borrower_id) REFERENCES borrower(id)
- );
-
- /* template = true fees are saved for users or branches. If template or default
- * are true, estimate_id should be null. */
- CREATE TABLE fee (
- id INT AUTO_INCREMENT NOT NULL,
- estimate_id INT,
- amount INT NOT NULL,
- type ENUM('Goverment', 'Title', 'Other'),
- notes VARCHAR(255),
- name VARCHAR(30),
- /* Group heading shown in report */
- category VARCHAR(60),
- PRIMARY KEY (`id`),
- FOREIGN KEY (estimate_id) REFERENCES estimate(id)
- );
-
- /* Templates to be reused by users or branches. Either user_id or branch_id must
- * be non-null. */
- CREATE TABLE fee_template (
- id INT AUTO_INCREMENT,
- user_id INT,
- branch_id INT,
- amount INT NOT NULL,
- type ENUM('Goverment', 'Title', 'Other'),
- notes VARCHAR(255),
- name VARCHAR(30),
- /* Group heading shown in report */
- category VARCHAR(60),
- auto BOOLEAN,
- /* If fee should be automatically applied */
- PRIMARY KEY (`id`),
- FOREIGN KEY (user_id) REFERENCES user(id),
- FOREIGN KEY (branch_id) REFERENCES branch(id)
- );
|