FML is a financial modeling language for financial planning and analysis.
npm install @fidt/fml-engineFinancial 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
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.
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
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
Sử dụng // để comment line và /**/ để comment 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
``fml`
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 đượ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
#### 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
Ví dụ:
`fmlType
Asset.Type // Truy cập attribute của Asset đang được tính toánTags
Asset.Amount.Value // Truy cập attribute lồng nhau
Asset.Tags[0] // Truy cập element đầu tiên của attribute của Asset đang được tính toán`
Ví dụ
`fml`
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
}
}
Ví dụ
`fml
if (Asset.Amount > 10) {
} else {
}
`
#### Logic operator
`fml`
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
`fml`
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
`fmlAmount
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 của Asset hiện tại cho kỳ hiện tại`
#### Optional Chaining
Tương tự Javascript, FML hỗ trợ optional chaining
`fml`
A = Asset.Attribute1?.Attribute2
// Tương đương với
if (Asset.Attribute1 is not null) {
A = Asset.Attribute1.Attribute2
} else {
A = null
}
- AddAsset(asset: Asset, reference: Item): Thêm tài sảnAddLiability(liability: Liability, reference: Item)
- : Thêm nợAddIncome(value: number, reference: Item)
- : Thêm thu nhậpAddExpense(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êuAddCashflowFinance(value: number, reference: Item)
- : Thêm dòng tiền từ tài chínhAddCashflowInvestment(value: number, reference: Item)
- : Thêm dòng tiền từ đầu tưRemoveAsset(asset: Asset, reference: Item)
- : Xóa tài sảnRemoveLiability(liability: Liability, reference: Item)
- : Xóa nợRemoveIncome(value: number, reference: Item)
- : Xóa thu nhậpRemoveExpense(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êuRemoveCashflowFinance(value: number, reference: Item)
- : Xóa dòng tiền từ tài chínhRemoveCashflowInvestment(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ề nullGetParam(item: Item, param: string)
- : Lấy param từ params list
- Interface liên quan đến hàm getParam`
typescript
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
}
`AddDisplayLine(path: string, name: string): path
- : Thêm display line và trả về path của Display Line được thêm.AddValueToDisplayLine(path: string, value: number, ref: Item)
- : Thêm giá trị vào display line
`fmlAssumptions
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ừ `
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)
}
}
}
#### Thông tin chung
Định nghĩa theo Typescript
`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
`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
`typescript
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
`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
`typescript
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
`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
`typescript`
export enum TinhTrangDuc {
DucThat = 'duc_that',
DucGia = 'duc_gia',
}
#### Căn hộ
Định nghĩa theo Typescript
`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
`typescript
`
#### Công trình xây dựng khác
Định nghĩa theo Typescript
`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
`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
`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
`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
`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
`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
`typescript
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
`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
`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
`typescript
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
`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
`typescript`
export enum XuatXuVang {
TrongNuoc = 'trong_nuoc',
NuocNgoai = 'nuoc_ngoai',
}$3
#### Thông tin chung
Định nghĩa theo Typescript
`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'
`typescript
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"
}
`
#### Thông tin chung
Định nghĩa theo Typescript
`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
/**
* 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;
}
`
#### Thông tin chung
Định nghĩa theo Typescript
`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;
}
`
#### Thông tin chung
`typescript
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
`typescript
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',
}
`
#### Bảo hiểm nhân thọ
`typescript`
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
`typescript``
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;
}