npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@fidt/fml-engine

v1.0.0

Published

FML is a financial modeling language for financial planning and analysis.

Downloads

61

Readme

Introduction

Overview

Financial Modelling Language là DSL (Domain Specific Language) nhằm xây dựng bộ công thức tính toán cho Financial Statement của một cá nhân.

Các file source code của FML sẽ được lưu với extension .fml

Mô hình tính toán

Cách engine chạy

Engine FML sẽ chạy qua từng chu kỳ tính toán (Period), cụ thể ở đây là hàng tháng. Ở từng chu kỳ, engine sẽ chạy qua từng item, bao gồm Tài sản Asset, Nợ Liabilities, Thu nhập Income, Chi phí Expense, Giao dịch tài sản/nợ Transaction và tham chiếu với code fml đã được viết để dựa vào đó tính toán ra giá trị, các hiệu ứng của từng item với các item khác.

Các item tự động tính toán

Một số item sau sẽ được engine FML tự động tính toán

  • NetAsset: Tài sản ròng, tính theo công thức NetAsset = Sum(Asset) - Sum(Liabilities)
  • NetIncome: Thu nhập ròng, tính theo công thức NetIncome = Sum(Income) - Sum(Expense)
  • NetCashflow: Dòng tiền ròng, tính theo công thức NetCashflow = CashflowOperation + CashflowFinance + CashflowInvestment
  • Cash: Tiền mặt, tính theo công thức Cash = LastPeriod(Cash) + NetCashflow

Cộng dồn từ period thấp lên period cao

Engine FML sẽ thực hiện quy tắc cộng dồn từ period thấp lên period cao (từ tháng lên quý, từ tháng lên 6 tháng, từ tháng lên năm) theo nguyên lý sau:

  • Đối với Asset, Liabilities: sử dụng giá trị của kỳ cuối cùng ở period thấp làm giá trị của period cao
  • Đối với Income, Expense: cộng các giá trị của các kỳ ở period thấp làm giá trị của period cao

Syntax grammar

Comment

Sử dụng // để comment line và /**/ để comment block

Top level block

Để bắt đầu viết các công thức tính dành cho tài sản (Asset), nợ (Liabilities), Thu nhập (Income), Chi phí (Expense), Giao dịch tài sản/nợ (Transaction), viết như dưới đây và viết code bên dưới

Asset {
// Code tính tài sản
}
Liabilities {
// Code tính nợ
}
Income {
// Code tính thu nhập
}
Expense {
// Code tính chi phí
}
Transaction {
// Code tính giao dịch tài sản/nợ
}

Variable và scope

Variable được tạo ra bằng operator gán giá trị (assignment operator). Variable sẽ có scope global trong lần tính toán của item và period hiện tại. Khi engine FML di chuyển qua line item hoặc period tiếp theo, variable sẽ được reset

Global variable

Assumptions

Class Assumptions là một global variable

FirstPeriod

Kỳ bắt đầu chạy Financial modelling, là ngày cuối của tháng chốt sổ của profile

CurrentPeriod

Ngày cuối cùng của kỳ hiện tại đang chạy

Các operation cụ thể

Truy cập attribute của một item

Ví dụ:

Asset.Type // Truy cập attribute `Type` của `Asset` đang được tính toán
Asset.Amount.Value // Truy cập attribute lồng nhau
Asset.Tags[0] // Truy cập element đầu tiên của attribute `Tags` của `Asset` đang được tính toán

Matching

Ví dụ

case Asset.Type { // Các tình huống của tài sản
    "Tiền mặt" -> {
        // Code xử lý tình huống tài sản là Tiền mặt
    }
    "Tiền gửi" -> {
        // Code xử lý tình huống tài sản là Tiền gửi
    }
    Other -> {
        // Tình huống khác
    }
}

Branching

Ví dụ

if (Asset.Amount > 10) {

} else {

}

Operator

Logic operator

A and B // phép toán AND
A or B // phép toán OR
A is null // kiểm tra giá trị null
not A // đảo nghịch của A
A > B // So sánh A lớn hơn B
A >= B // So sánh A lớn hơn hoặc bằng B
A < B // So sánh A nhỏ hơn B
A <= B // So sánh A nhỏ hơn hoặc bằng B
A == B // So sánh A bằng B
A != B // So sánh A khác B

Math operator

A * B // phép toán nhân
A / B // phép toán chia
A + B // phép toán cộng
A - B // phép toán trừ
A mod B // phép toán lấy phần dư
A div B // phép toán lấy phần nguyên

Assignment operator

A = 1 // gán giá trị 1 vào biến A. Nếu biến A chưa tồn tại thì sẽ tự tạo ra biến A
Asset.Amount = 100 // Gán giá trị 100 vào attribute `Amount` của `Asset` hiện tại cho kỳ hiện tại

Optional Chaining

Tương tự Javascript, FML hỗ trợ optional chaining

A = Asset.Attribute1?.Attribute2
// Tương đương với
if (Asset.Attribute1 is not null) {
    A = Asset.Attribute1.Attribute2
} else {
    A = null
}

Các hàm built-in

  • AddAsset(asset: Asset, reference: Item): Thêm tài sản

  • AddLiability(liability: Liability, reference: Item): Thêm nợ

  • AddIncome(value: number, reference: Item): Thêm thu nhập

  • AddExpense(value: number, reference: Item): Thêm chi phí

  • AddCashflowOperation(value: number, reference: Item): Thêm dòng tiền từ thu nhập và chi tiêu

  • AddCashflowFinance(value: number, reference: Item): Thêm dòng tiền từ tài chính

  • AddCashflowInvestment(value: number, reference: Item): Thêm dòng tiền từ đầu tư

  • RemoveAsset(asset: Asset, reference: Item): Xóa tài sản

  • RemoveLiability(liability: Liability, reference: Item): Xóa nợ

  • RemoveIncome(value: number, reference: Item): Xóa thu nhập

  • RemoveExpense(value: number, reference: Item): Xóa chi phí

  • RemoveCashflowOperation(value: number, reference: Item): Xóa dòng tiền từ thu nhập và chi tiêu

  • RemoveCashflowFinance(value: number, reference: Item): Xóa dòng tiền từ tài chính

  • RemoveCashflowInvestment(value: number, reference: Item): Xóa dòng tiền từ đầu tư

  • LastPeriod(item: Item, period: number): Item: Chọn giá trị của item tại chu kỳ trước hoặc sau chu kỳ hiện tại. period là số chu kỳ

  • LastValue(item: Item): Lấy giá trị gần nhất phía trước có giá trị != 0, nếu không tìm thấy trả về null

  • GetParam(item: Item, param: string): Lấy param từ params list

    • Interface liên quan đến hàm getParam
    export interface Assumption {
    	nane: string
    	target_param: string
    	filter: Filter[]
    	param_value: number
    }
    
    export interface Filter {
    	field: string
    	value: string
    	operator: ">" | "<" | ">=" | "<=" | "=" | "<>"
    }
    
    export interface Param {
    	name: string
    }

Example

Asset {
    case Asset.Type {
        "Tiền mặt" -> {
            // Nếu là tiền mặt thì giá trị không thay đổi
            Asset.Amount = LastPeriod(Asset.Amount, 1)
        }
        "Tiền gửi tiết kiệm" -> {
            // Nếu là tiền gửi tiết kiệm thì tăng theo lãi suất gửi tiết kiệm từ `Assumptions`
            Asset.Amount =  LastPeriod(Asset.Amount, 1) * ( 1 + Assumptions.CashGrowthPerYear / 12 )
        }
        Other -> {
            // Nếu là tài sản khác thì không thay đổi giá trị
            Asset.Amount = LastPeriod(Asset.Amount, 1)
        }
    }
}
Liability {
    case Liability.Type {
        "Trả góp" -> {
            // Tính tiền trả lãi
            InterestPayment = LastPeriod(Liability.Principal, 1) * Liability.InterestRate / 12
            // Tính tiền trả gốc
            PrincipalPalPayment = Liability.PaymentAmount - InterestPayment
            // Tính gốc còn lại
            Liability.Principal = LastPeriod(Liability.Principal, 1) - PrincipalPayment
        }
        Other -> {
            Liability.Principal = LastPeriod(Liability.Principal, 1)
        }
    }
}

Modelling

Thông tin về các class

Asset

Thông tin chung

Định nghĩa theo Typescript

type TaiSan = {
	/**
	 * Quyền sở hữu
	 */
	quyen_so_huu: string | any;
	/**
	 * Loại
	 */
	loai_tai_san: string;
	/**
	 * Tên
	 */
	ten_tai_san: string;
	/**
	 * Giá trị theo 1 đơn vị
	 */
	gia_tri_theo_1_don_vi: number;
	/**
	 * Số lượng
	 */
	so_luong: number;
	/**
	 * Tỉ trọng
	 */
	ty_trong: number;
	/**
	 * Gía trị
	 */
	tong_gia_tri: number;
	/**
	 * Ghi chú
	 */
	ghi_chu?: string;

	id?: string;
	w_updated_time?: Date;
	w_updated_user?: any;
};

Tài sản vốn góp

Định nghĩa theo Typescript

export default interface VonGop extends TaiSan {
	ten_doanh_nghiep: string;
	mst: string;
	loai_hinh_doanh_nghiep: LoaiHinhDoanhNghiep | string;
	chu_doanh_nghiep: boolean | string;
	ty_le_so_huu: number | string;
	thu_nhap_tu_doanh_nghiep: number | string;
	gia_tri_cong_ty: number | string;
	von_dieu_le: number | string;
	tong_doanh_thu: number | string;
	loi_nhuan_sau_thue: number | string;
	nganh_nghe_kinh_doanh: NganhNgheKinhDoanh | string;
	dia_chi: string;
	phan_tram_tang_truong_doanh_thu: number | string;
	thoi_diem_thanh_lap: Date | string;
	so_luong_nhan_vien: number | string;
	mo_ta_ngan_ve_hoat_dong_kinh_doanh: string;
}

Enum liên quan đến VonGop

export enum LoaiHinhDoanhNghiep {
	CongTyTNHH = 'cong_ty_tnhh',
	CongTyCoPhan = 'cong_ty_co_phan',
	DoanhNghiepTuNhan = 'doanh_nghiep_tu_nhan',
}

export enum NganhNgheKinhDoanh {
	KinhDoanh = 'kinh_doanh',
	ITPhanMem = 'it_phan_mem',
	HanhChinhVanPhong = 'hanh_chinh_van_phong',
	GiaoDucDaoTao = 'giao_duc_dao_tao',
	TuVan = 'tu_van',
	MarketingTruyenThongQuangCao = 'marketing_truyen_thong_quang_cao',
	VanTaiKhoVan = 'van_tai_kho_van',
	KeToanKiemToan = 'ke_toan_kiem_toan',
}

Bất động sản

Định nghĩa theo Typescript

export default interface BatDongSan extends TaiSan {
	thoi_diem_mua: Date | string;
	da_co_so: boolean;
	da_hoan_cong: boolean;
	thong_tin_cho_thue: ThongTinChoThue;
}

Enum và Interface liên quan đến BatDongSan

export interface ThongTinChoThue {
	/**
	 * Giá thuê/cho thuê
	 */
	gia_thue: number;
	/**
	 * Tần suất thanh toán
	 */
	tan_suat_thanh_toan: TanSuatThanhToan | string;
	/**
	 * Thời điểm cho thuê
	 */
	thoi_diem_cho_thue: Date | string;
	/**
	 * Mức tăng cho thuê theo % (tháng, quý, năm)
	 */
	muc_tang_cho_thue_theo_phan_tram: MucTangChoThueTheoPhanTram;
	/**
	 * Ghi chú
	 */
	ghi_chu: string;
}

export enum TanSuatThanhToan {
	HangTuan = 'hang_tuan',
	HangThang = 'hang_thang',
	Hangquy = 'hang_quy',
	HangNam = 'hang_nam',
}

export enum MucTangChoThueTheoPhanTram {
	Thang = 'thang',
	Quy = 'quy',
	Nam = 'nam',
}

export enum Huong {
	Dong = 'dong',
	Tay = 'tay',
	Nam = 'nam',
	Bac = 'bac',
	DongBac = 'dong_bac',
	DongNam = 'dong_nam',
	TayBac = 'tay_bac',
	TayNam = 'tay_nam',
}

export enum HinhThucSoHuu {
	Chung = 'chung',
	Rieng = 'rieng',
}

Nhà

Định nghĩa theo Typescript

export default interface Nha extends BatDongSan {
	/**
	 * Tên dự án
	 */
	ten_du_an: string;
	/**
	 * Địa chỉ
	 */
	dia_chi: string;
	/**
	 * Diện tích xây dựng / sàn
	 */
	dien_tich_xay_dung: string;
	/**
	 * Diện tích đất
	 */
	dien_tich_dat: string;
	/**
	 * Giá trị nội thất
	 */
	gia_tri_not_that: number;
	/**
	 * Hướng
	 */
	huong: Huong;
	/**
	 * Số phòng ngủ
	 */
	so_phong_ngu: number;
	/**
	 * Số phòng tắm
	 */
	so_phong_tam: number;
	/**
	 * Số tầng
	 */
	so_tang: number;
	/**
	 * Tình trạng đúc: Đúc thật/Đúc giả
	 */
	tinh_trang_duc: TinhTrangDuc;
	/**
	 * Hình thức sở hữu (chung, riêng)
	 */
	hinh_thuc_so_huu: HinhThucSoHuu;
	/**
	 * Thời hạn sử dụng đất đến ngày …/…/... (có thời hạn)
	 * nếu null thì thời hạn sử dụng không giới hạn.
	 */
	thoi_han_su_dung_den_ngay: Date | string | null;
}

Enum và Interface liên quan đến Nha

export enum TinhTrangDuc {
	DucThat = 'duc_that',
	DucGia = 'duc_gia',
}

Căn hộ

Định nghĩa theo Typescript

export default interface CanHo extends BatDongSan {
	/**
	 * Tên nhà chung cư / Tên dự án
	 */
	ten_du_an: string;
	/**
	 * Địa chỉ
	 */
	dia_chi: string;
	/**
	 * Diện tích sàn (thông thủy, tim tường)
	 */
	dien_tich_san: string;
	/**
	 * Thời hạn sử dụng đất đến ngày …/…/... (có thời hạn)
	 * nếu null thì thời hạn sử dụng không giới hạn.
	 */
	thoi_han_su_dung_den_ngay: Date | string | null;
	/**
	 * Hình thức sở hữu (chung, riêng)
	 */
	hinh_thuc_so_huu: HinhThucSoHuu;
	/**
	 * block/building
	 */
	block_building: string;
	/**
	 * Tầng thứ
	 */
	tang_thu: number;
	/**
	 * Giá trị nội thất (đơn vị vnđ)
	 */
	gia_tri_noi_that: number;
	/**
	 * Hướng
	 */
	huong: Huong;
	/**
	 * Số phòng ngủ
	 */
	so_phong_ngu: number;
	/**
	 * Số phòng tắm
	 */
	so_phong_tam: number;
	/**
	 * view quan cảnh
	 */
	view_quan_canh: string;
}

Enum và Interface liên quan đến CanHo

Công trình xây dựng khác

Định nghĩa theo Typescript

export default interface CongTrinh extends BatDongSan {
	/**
	 * Diện tích xây dựng, sàn
	 */
	dien_tich_xay_dung: number;
	/**
	 * Hình thức sở hữu (chung, riêng)
	 */
	hinh_thuc_so_huu: HinhThucSoHuu;
	/**
	 * Hạng mục công trình
	 */
	hang_muc_cong_trinh: string;
	/**
	 * Thời hạn sử dụng đất đến ngày …/…/... (có thời hạn)
	 * nếu null thì thời hạn sử dụng không giới hạn.
	 */
	thoi_han_su_dung_den_ngay: Date | string | null;
}

Thửa đất

Định nghĩa theo Typescript


export default interface ThuaDat extends BatDongSan {
	/**
	 * Tên dự án
	 */
	ten_du_an: string;
	/**
	 * Địa chỉ
	 */
	dia_chi: string;
	/**
	 * thửa đát số
	 */
	thua_dat_so: number | string;
	/**
	 * Tờ bản đồ số
	 */
	to_ban_do_so: number | string;
	/**
	 * Mục đích sử dụng
	 */
	muc_dich_su_sung: string;
	/**
	 * Mục đích sử dụng
	 */
	dien_tich_thua_dat: string;
	/**
	 * Hình thức sở hữu (chung, riêng)
	 */
	hinh_thuc_su_huu: HinhThucSoHuu;
	/**
	 * Thời hạn sử dụng đất đến ngày …/…/... (có thời hạn)
	 * nếu null thì thời hạn sử dụng không giới hạn.
	 */
	thoi_han_su_dung_den_ngay: Date | string | null;

	/**
	 * Nguồn gốc sử dụng
	 */
	nguon_goc_su_dung: string;
}

Chứng chỉ quỹ

Định nghĩa theo Typescript

export default interface ChungChiQuy extends TaiSan {
	/**
	 * Tên quỹ
	 */
	ten_quy: string;
	/**
	 * Mã quỹ
	 */
	ma_quy: string;
	/**
	 * Loại quỹ
	 */
	loai_quy: string;
	/**
	 * Thời điểm mua
	 */
	thoi_diem_mua: Date | string;
	/**
	 * Công ty quản lý quỹ
	 */
	cong_ty_quan_ly_quy: string;
}

Cổ phiếu

Định nghĩa theo Typescript

export default interface CoPhieu extends TaiSan {
	ma_co_phieu: string;
	thoi_diem_mua: Date | string;
	giao_dich_tai_cong_ty_chung_khoan: string;
}

Ngoại tệ

Định nghĩa theo Typescript

export default interface NgoaiTe extends TaiSan {
	/**
	 * Loại ngoại tệ
	 */
	loai_ngoai_te: string;
	/**
	 * Thời điểm mua
	 */
	thoi_diem_mua: Date | string;
}

Tiền gửi

Định nghĩa theo Typescript

export default interface TienGui extends TaiSan {
	/**
	 * Số tiền gửi
	 */
	so_tien_gui: number;
	/**
	 * Tên ngân hàng gửi
	 */
	ten_ngan_hang_gui: string;
	/**
	 * Lãi suất (theo năm)
	 */
	lai_suat: number;
	/**
	 * Thời điểm gửi tiền
	 */
	thoi_diem_gui_tien: Date | string;
	/**
	 * Kỳ hạn
	 */
	ky_han: KyHanTienGui | string;
	/**
	 * Thời điểm đáo hạn
	 */
	thoi_diem_dao_han: Date | string;
	/**
	 * Loại tiền tệ
	 */
	loai_tien_te: LoaiTienTe | string;
	/**
	 * Tên chi nhánh
	 */
	ten_chi_nhanh: string;
	/**
	 * Hình thức gửi tiền
	 */
	hinh_thuc_gui_tien: HinhThucGuiTien | string;
	/**
	 * Hình thức đáo hạn
	 */
	hinh_thuc_dao_han: HinhThucDaoHan | string;
}

Enum và Interface liên quan đến TienGui

export enum KyHanTienGui {
	Tuan = 'tuan',
	Thang = 'thang',
}

export enum HinhThucGuiTien {
	TaiQuay = 'tai_quay',
	Online = 'online',
}
export enum HinhThucDaoHan {
	TaiTucTuDong = 'tai_tuc_tu_dong',
	TaiLucTheoYeuCau = 'tai_luc_theo_yeu_cau',
}

Tiền hoàn hợp đồng bảo hiểm

Định nghĩa theo Typescript

export default interface TienHoanHopDongBaoHiem extends TaiSan {
	/**
	 * Mã hợp đồng
	 */
	ma_hop_dong: string;
	/**
	 * Thời điểm hoàn lại
	 */
	thoi_diem_hoan_lai: Date | string;
	/**
	 * Số tiền hoàn lại
	*/
	so_tien_hoan_lai: number;
	/**
	 * Tên sản phẩm
	*/
	ten_san_pham: string;
}

Trái phiếu

Định nghĩa theo Typescript

export default interface TraiPhieu extends TaiSan {
	/**
	 * Mã trái phiếu
	 */
	ma_trai_phieu: string;
	/**
	 * Tên tổ chức phát hành
	 */
	ten_to_chuc_phat_hanh: string;
	/**
	 * Loại trái phiếu
	 */
	loai_trai_phieu: LoaiTraiPhieu | string;
	/**
	 * Thời điểm mua/đặt lệnh
	 */
	thoi_diem_mua: Date | string;
	/**
	 * Thời điểm phát hành
	 */
	thoi_diem_phat_hanh: Date | string;
	/**
	 * Thời điểm đáo hạn
	 */
	thoi_hiem_dao_han: Date | string;
	/**
	 * Tiền tệ
	 */
	tien_te: LoaiTienTe | string;
	/**
	 * Kỳ hạn
	 */
	ky_han: TanSuatNhan | string;
	/**
	 * Thời điểm trả lại
	 */
	thoi_diem_tra_lai: Date | string;
	/**
	 * Lợi suất coupon / cố định (%)
	 */
	loi_suat_coupon: number;
	/**
	 * Lợi suất thực nhận (%)
	 */
	loi_xuat_thuc_nha: number;
	/**
	 * Dòng tiền thực nhận khi đầu tư
	 */
	dong_tien_thuc_nhan_khi_dau_thu: number;
	/**
	 * Số lượng trái phiếu sở hữu
	 */
	so_luong_trai_phieu_so_hu: number;
	/**
	 * Giá mua (theo 1 đơn vị) (VNĐ)
	 */
	gia_mua: number;
	/**
	 * Tổng giá trị sở hữu (VNĐ)
	 */
	tong_tra_tru_so_huu: number;
	/**
	 * Kỳ trả lãi coupon | (Tần suất nhận)
	 */
	ky_tra_lai_coupon: TanSuatNhan;
	/**
	 * Mã giấy tờ gốc
	 */
	ma_giay_to_goc: string;
	/**
	 * Tên tổ chức bảo lãnh
	 */
	ten_to_chuc_bao_lanh: string;
}

Enum và Interface liên quan đến TraiPhieu


export enum LoaiTraiPhieu {
	TraiPhieuChinhPhu = 'trai_phieu_chinh_phu',
	TraiPhieuChinhQuyenDiaPhuong = 'trai_phieu_chinh_quyen_dia_phuong',
	TraiPhieuDoanhNghiep = 'trai_phieu_doanh_nghiep',
}

export enum TanSuatNhan {
	LienTiep12Thang = 'lien_tiep_12_thang',
	KyHan3Thang = '3_thang',
	KyHan6Thang = '6_thang',
	KyHan12Thang = '12_thang',
}

Vàng

Định nghĩa theo Typescript

export default interface Vang extends TaiSan {
	/**
	 * Trọng lượng
	 */
	trong_luong: number;
	/**
	 * Giá trị khi mua
	 */
	gia_tri_khi_mua: number;
	/**
	 * Tên danh nghiệp bán vàng
	 */
	ten_doanh_nghiep_ban_vang: string;
	/**
	 * Thời điểm mua
	 */
	thoi_diem_mua: Date | string;
	/**
	 * Hàm lượng vàng
	 */
	tuoi_ham_luong_vang: string | number;
	/**
	 * Xuất xứ
	 */
	xuat_xu: XuatXuVang | string; 
}

Enum và Interface liên quan đến Vang

export enum XuatXuVang {
	TrongNuoc = 'trong_nuoc',
	NuocNgoai = 'nuoc_ngoai',
}

Liability

Thông tin chung

Định nghĩa theo Typescript

export default interface No {
	id: string;
	so_tien_vay: number;
	lai_suat: number;
	ky_han: number;
	hinh_thuc_vay: HinhThucVay;
	hinh_thuc_tra_lai: HinhThucTraLai;
	ngay_vay: Date | string;
	ngay_dao_han: Date | string;
	ghi_chu?: string;
}

Enum và Interface liên quan đến 'No'

export enum LoaiNo {
    NganHan = 'no_ngan_han',
    TrungHan = 'no_trung_han',
    DaiHan = 'no_dai_han',
    ThauChi = 'thau_chi',
    Khac = 'khac'
}

export enum LoaiLaiSuat{
    CoDinh = "co_dinh", 
    ThaNoi = "tha_noi"
}

export enum TanSuatTraNo{
    HangThang = "hang_thang", 
    HangQuy = "hang_quy",
    HangNuaNam = "hang_nua_nam", 
    HangNam = "hang_nam"
}

export enum HinhThucVay{
    TheChap = "the_chap", 
    TinChap = "tin_chap",
    TheTinDung = "the_tin_dung", 
    VayNgoai = "vay_ngoai", 
    VayNguoiThan = "vay_nguoi_than"
}


export enum HinhThucTraLai{
    DuNoGiamGian = "du_no_giam_dan",
    DuNoBanDau = "du_no_ban_dau_goc"
}

Income

Thông tin chung

Định nghĩa theo Typescript

export default interface ThuNhap {
	/**
	 * ID thu nhập
	 */
	id?: string;
	/**
	 * ID deal
	 */
	deal_id?: string;
	/**
	 * Nguồn thu nhập
	 */
	nguon_thu_nhap?: string;
	/**
	 * Loại thu nhập
	 */
	loai_thu_nhap: LoaiThuNhap;
	/**
	 * Thu nhập
	 */
	thu_nhap: ChiTietThuNhap | string;
	/**
	 * Số tiền
	 */
	so_tien: number;
	/**
	 * Tần suất
	 */
	tan_suat: TanSuat;
	/**
	 * Thời điểm bắt đầu
	 */
	thoi_diem_bat_dau: Date | string;
	/**
	 *  Thu nhập dự kiến sẽ thay đổi đáng kể
	 */
	thu_nhap_du_kien_se_thay_doi_dang_ke: boolean;
	/**
	 * Thu nhập sau thuế
	 */
	thu_nhap_sau_thue: boolean;
	/**
	 *
	 * Bao gồm tăng theo giá trị hoặc phần trăm nhất định theo từng năm
	 */
	loai_muc_tang?: LoaiMucTang;
	/**
	 * Mức tăng là số tiền được tăng hoặc % được tăng
	 */
	muc_tang: number;
	/**
	 * Thời hạn
	 */
	thoi_han: number;
	/**
	 * Loại thời hạn
	 */
	loai_thoi_han: LoaiThoiHan;

	/**
	 * Tổng thu nhập 1 năm (Auto nhảy giá
	 * trị, dựa vào SỐ TIỀN VÀ TẦN SUẤT, từ
	 * đó cho ra kết quả trong 1 năm)
	 */
	tong_thu_nhap_1_nam: number;

	/**
	 * Thu nhập gắn với loại tài sản
	 */
	gan_voi_loai_tai_san: LoaiTaiSan | string;
	/**
	 * Thu nhập gắn với tài sản
	 */
	gan_voi_tai_san: Partial<TaiSan> | string;
	/**
	 * Ghi chú
	 */
	ghi_chu: string;
	w_updated_user: any;
	w_updated_time: Date;

	thoi_diem_ket_thuc_dropdown_value: string;
	thoi_diem_ket_thuc_value: string | Date;
	thoi_diem_ket_thuc: any;
}

Exppense

Thông tin chung

Định nghĩa theo Typescript

export default interface ChiTieu {
	/**
	 * ID chi tiêu
	 */
	id?: string;
	/**
	 * ID deal
	 */
	deal_id?: string;
	/**
	 * Nguồn chi tiêu
	 */
	nguon_chi_tieu: string;
	/**
	 * Loại chi tiêu
	 */
	loai_chi_tieu: LoaiChiTieu;
	/**
	 * Loại chi phí
	 */
	loai_chi_phi: LoaiChiPhi | string;
	/**
	 * Thời hạn
	 */
	thoi_han: number;
	/**
	 * Loại thời hạn
	 */
	loai_thoi_han: LoaiThoiHan;
	/**
	 * Số tiền
	 */
	so_tien: number;
	/**
	 * Tần suất
	 */
	tan_suat: TanSuat;
	/**
	 * Thời điểm bắt đầu
	 */
	thoi_diem_bat_dau: Date | string;

	/**
	 * Tổng chi tiêu 1 năm
	 */
	tong_chi_tieu_1_nam: number;
	/**
	 * Chi tiêu gắn với loại tài sản
	 */
	gan_voi_loai_tai_san: LoaiTaiSan;
	/**
	 * Chi tiêu gắn với tài sản
	 */
	gan_voi_tai_san: TaiSan | string;
	/**
	 * Chi tiêu gắn với khoản vay
	 */
	gan_voi_khoan_vay: No | string;
	/**
	 * Ghi chú
	 */
	ghi_chu: string;
	w_updated_user: any;
	w_updated_time: Date;
	thoi_diem_ket_thuc_dropdown_value: string;
	thoi_diem_ket_thuc_value: string | Date;
	thoi_diem_ket_thuc: any;
}

Transaction

Thông tin chung

export default interface GiaoDich {
	id?: string;

	deal_id?: string;

	tai_san?: TaiSan | string;

	no?: No | string;

	thoi_diem_giao_dich: Date | string;

	doi_tuong_giao_dich: DoiTuongGiaoDich;

	loai_giao_dich: LoaiGiaoDich;


	gia_tri_giao_dich: number;

	hinh_thuc_ban?: HinhThucBan;

	gia_tri_tai_san_theo_mot_don_vi?: number;

	so_luong?: number;

	ghi_chu?: string;
}

Enum và Interface liên quan đến GiaoDich

export enum DoiTuongGiaoDich {
	TaiSan = 'tai_san',
	No = 'no',
}

export enum LoaiGiaoDich {
	ThemTaiSanHienCo = 'them_tai_san_hien_co',
	MuaTaiSan = 'mua_tai_san',
	BanTaiSan = 'ban_tai_san',
	ThemTaiSanTienGui = 'them_tai_san_tien_gui',
	ThemTaiSanChoVayTien = 'them_tai_san_cho_vay_tien',
	VayNo = 'vay_no',
	TraTruocHan = 'tra_truoc_han',
}

export enum HinhThucBan {
	ToanPhan = 'toan_phan',
	MotPhan = 'mot_phan',
}

Insurance

Bảo hiểm nhân thọ

export interface BaoHiemSucKhoe {
    nguoiCapNhat: string | null;
    thoiDiemCapNhat: string | null;
    id?: number | null;
    deal_id: string | null;
    doanhNghiepBH: string | null;
    tenSP: string | null;
    benMuaBH: string | null;
    loaiTruVaTangPhi: string | null;
    phiHangNam: number | null;
    tanSuatDongPhi: string | null;
    nguoiDuocBH: string | null;
    phamViDiaLy: string | null;
    thoiHanHopDong: string | null;
    thoiGianCho: string | null;
    laSanPhamBoTroBHNT: boolean;
    hopDongBHNT: string | null;
    nguoiDuocBH_benefit: string | null;
    phiHangNam_benefit: number | null;
    tanSuatDongPhi_benefit: string | null;
    dongChiTra: boolean;
    baoLanhVienPhi: boolean;
    tuVongThuongTatDoTaiNan: number | null;
    tuVongThuongTatKhongDoTaiNan: number | null;
    chiPhiDieuTriTaiNan: number | null;
    dieuTriNoiTru: number | null;
    namVien: number | null;
    troCapNamVien: number | null;
    chiPhiPhauThuat: number | null;
    coLoaiTruPhiCayGhep: boolean;
    cayGhepNoiTang: number | null;
    coLoaiTriPhiCayGhepNoiTang: boolean;
    chiPhiDieuTriTruocNhapVien: number | null;
    chiPhiDieuTriSauRaVien: number | null;
    chiPhiChamSocTaiNha: number | null;
    chiPhiVanChuyen: number | null;
    chiPhiMaiTang: number | null;
    phucHoiChucNang: number | null;
    troCapBenhVienCong: number | null;
    khac: string | null;
    sanPhamBoTro: any[];
    tyLeDongChiTra: number | null;
    khachHang: string | null;
}

Bảo hiểm sức khỏe

export interface BaoHiemSucKhoe {
    nguoiCapNhat: string | null;
    thoiDiemCapNhat: string | null;
    id?: number | null;
    deal_id: string | null;
    doanhNghiepBH: string | null;
    tenSP: string | null;
    benMuaBH: string | null;
    loaiTruVaTangPhi: string | null;
    phiHangNam: number | null;
    tanSuatDongPhi: string | null;
    nguoiDuocBH: string | null;
    phamViDiaLy: string | null;
    thoiHanHopDong: string | null;
    thoiGianCho: string | null;
    laSanPhamBoTroBHNT: boolean;
    hopDongBHNT: string | null;
    nguoiDuocBH_benefit: string | null;
    phiHangNam_benefit: number | null;
    tanSuatDongPhi_benefit: string | null;
    dongChiTra: boolean;
    baoLanhVienPhi: boolean;
    tuVongThuongTatDoTaiNan: number | null;
    tuVongThuongTatKhongDoTaiNan: number | null;
    chiPhiDieuTriTaiNan: number | null;
    dieuTriNoiTru: number | null;
    namVien: number | null;
    troCapNamVien: number | null;
    chiPhiPhauThuat: number | null;
    coLoaiTruPhiCayGhep: boolean;
    cayGhepNoiTang: number | null;
    coLoaiTriPhiCayGhepNoiTang: boolean;
    chiPhiDieuTriTruocNhapVien: number | null;
    chiPhiDieuTriSauRaVien: number | null;
    chiPhiChamSocTaiNha: number | null;
    chiPhiVanChuyen: number | null;
    chiPhiMaiTang: number | null;
    phucHoiChucNang: number | null;
    troCapBenhVienCong: number | null;
    khac: string | null;
    sanPhamBoTro: any[];
    tyLeDongChiTra: number | null;
    khachHang: string | null;
}