Giải pháp ứng dụng công nghệ chuỗi khối blockchain trong hợp đồng thông minh cho thanh toán xây dựng

168 0 0
Giải pháp ứng dụng công nghệ chuỗi khối blockchain trong hợp đồng thông minh cho thanh toán xây dựng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA VÕ THANH THIỆN GIẢI PHÁP ỨNG DỤNG CÔNG NGHỆ CHUỖI KHỐI BLOCKCHAIN TRONG HỢP ĐỒNG THƠNG MINH CHO THANH TỐN XÂY DỰNG Chun ngành: Quản Lý Xây Dựng Mã ngành: 8580302 LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 07 năm 2023 CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA –ĐHQG –HCM Cán hướng dẫn khoa học 1: PGS.TS Phạm Vũ Hồng Sơn Cán hướng dẫn khoa học 2: PGS.TS Phạm Vũ Hồng Sơn Cán chấm nhận xét 1: PGS.TS Quản Thành Thơ Cán chấm nhận xét 2: TS Nguyễn Hoài Nghĩa Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG TP HCM, ngày 14 tháng 08 năm 2023 Thành phần Hội đồng đánh giá Đề cương luận văn thạc sĩ gồm: Chủ tịch hội đồng: TS Lê Hoài Long Thư ký hội đồng: PGS.TS Lương Đức Long Ủy viên phản biện 1: PGS.TS Quản Thành Thơ Ủy viên phản biện 2: TS Nguyễn Hoài Nghĩa Ủy viên: TS Đặng Thị Trang CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA KỸ THUẬT XÂY DỰNG TS Lê Hoài Long PGS.TS Lê Anh Tuấn ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc Lập - Tự Do - Hạnh Phúc NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: VÕ THANH THIỆN MSHV: 2170213 Ngày, tháng, năm sinh: 06/12/1992 Nơi sinh: Đồng Nai Chuyên ngành: Quản lý xây dựng Mã số: 8580302 TÊN ĐỀ TÀI: I GIẢI PHÁP ỨNG DỤNG CÔNG NGHỆ CHUỖI KHỐI BLOCKCHAIN TRONG HỢP ĐỒNG THƠNG CHO THANH TỐN XÂY DỰNG APPLYING BLOCKCHAIN TECHNOLOGY IN SMART CONTRACTS FOR CONSTRUCTION PAYMENT: A COMPREHENSIVE SOLUTION FOR LUMP-SUM CONTRACTS II NHIỆM VỤ VÀ NỘI DUNG: III Thiết lập quy trình tốn chi phí xây dựng thông qua file liệu tiến độ MS Project lưu trữ trực tuyến cách sử dụng hợp đồng thơng minh để tiến hành tự động tốn cho nhà thầu sau mốc cơng việc hồn thành Xây dựng website để bên liên quan hợp đồng tương tác giao dịch tốn giám sát tình hình dự án Tiến hành chạy thử nghiệm quy trình tốn dự án mẫu Kết luận kiến nghị NGÀY GIAO NHIỆM VỤ: 06/02/2023 IV NGÀY HOÀN THÀNH NHIỆM VỤ:11/06/2023 V CÁN BỘ HƯỚNG DẪN: PGS.TS Phạm Vũ Hồng Sơn TS Phạm Hải Chiến Tp Hồ Chí Minh, ngày 11 tháng năm 2023 CÁN BỘ HƯỚNG DẪN PGS.TS Phạm Vũ Hồng Sơn CÁN BỘ HƯỚNG DẪN TS Phạm Hải Chiến CHỦ NHIỆM BỘ MƠN ĐÀO TẠO TS Lê Hồi Long TRƯỞNG KHOA KỸ THUẬT XÂY DỰNG PGS.TS Lê Anh Tuấn i LỜI CẢM ƠN Luận văn thạc sĩ quản lý xây dựng nằm hệ thống luận văn tốt nghiệp, nhằm bồi dưỡng lực tự học lực giải vấn đề cụ thể nảy sinh thực tiễn xây dựng học viên Đây trách nhiệm niềm tự hào học viên sau đại học Để hồn thành luận văn “Giải pháp ứng dụng cơng nghệ chuỗi khối Blockchain Hợp đồng thông minh cho tốn xây dựng”, ngồi cố gắng thân, nhận giúp đỡ nhiều từ bạn bè đồng nghiệp Tôi xin gửi lời chân thành cảm ơn đến bạn bè đồng nghiệp dành cho tơi giúp đỡ q báu Tơi xin gửi lời tri ân đến Thầy PGS.TS Phạm Vũ Hồng Sơn Thầy TS Phạm Hải Chiến, thầy tận tâm hướng dẫn, đưa gợi ý cho tơi để hình thành nên ý tưởng đề tài góp ý cho tơi hướng đắn dể giải tốn cách hiệu Sự tận tâm bảo thầy động lực để thúc đẩy tơi hồn thành tốt đề cương luận văn Tôi xin chân thành cảm ơn q Thầy Cơ Khoa Kỹ Thuật Cơng Trình Trường Đại Học Bách Khoa TP.HCM truyền đạt cho kiến thức quý báu, hành trang thiếu cho trình nghiên cứu, khoa học đường nghiệp sau Bằng cố gắng thân, luận văn thạc sĩ hoàn thành thời gian quy định, chắn khơng thể tránh khỏi thiếu sót Kính mong q thầy bảo tận tình, để em bổ sung thêm kiến thức hoàn thiện thân Xin trân trọng cảm ơn Tp Hồ Chí Minh, ngày tháng năm 2023 Võ Thanh Thiện ii TÓM TẮT Ngành xây dựng phải đối mặt với vấn đề nan giải chậm toán tranh chấp toán chủ đầu tư nhà thầu Mặc dù nhiều nghiên cứu thực để giải vấn đề giảm thiểu chậm trễ toán chậm, kết chưa tối ưu Trong nghiên cứu này, chúng tơi đề xuất quy trình tận dụng công nghệ Hợp đồng thông minh Blockchain để giải vấn đề toán chậm dự án xây dựng tranh chấp sau hợp đồng Quá trình nhằm giảm thiểu rủi ro liên quan đến việc dừng dự án kéo dài thời gian, đảm bảo tính liên tục dự án bảo vệ quyền tất bên liên quan Cụ thể, sử dụng Hợp đồng thông minh để tạo điều kiện thuận lợi cho giao dịch toán tự động chủ sở hữu nhà thầu Hợp đồng thông minh hoạt động bên thứ ba giám sát để đảm bảo hai bên hồn thành nghĩa vụ dự án Hơn nữa, công nghệ Chuỗi khối sử dụng để ghi lại tất giao dịch vòng đời dự án theo thứ tự thời gian, cho phép quản lý truy xuất hiệu liệu liên quan đến dự án Nhìn chung, phương pháp đề xuất đưa giải pháp cho thách thức chậm toán tranh chấp ngành xây dựng, tăng cường tính minh bạch thúc đẩy niềm tin bên liên quan dự án Từ khóa:Blockchain,hợp đồng thơng minh, quản lý dự án, toán xây dựng iii ABSTRACT The construction industry has been facing the challenging problem of delayed payments and disputes over payment between owners and contractors While multiple studies have been conducted to address this issue and reduce the delays caused by slow payments, the results have not been optimal In this study, we propose a new process that leverages Smart Contract technology in Blockchain to solve the problem of slow payment in construction projects and post-contract disputes This process aims to minimize the risks associated with project stoppage or prolonged duration, ensuring project continuity and safeguarding the rights of all parties involved Specifically, we utilize Smart Contracts to facilitate automated payment transactions between owners and contractors The Smart Contracts also act as a third-party monitor to ensure that both parties fulfill their obligations in the project Furthermore, Blockchain technology is employed to record all project lifecycle transactions in a chronological order, enabling efficient management and retrieval of project-related data Overall, our proposed approach offers a novel solution to the challenges posed by delayed payments and disputes in the construction industry, enhancing transparency, and promoting trust among project stakeholders Keywords: Blockchain, Smart Contracts, project management, construction payment iv LỜI CAM ĐOAN Tôi xin cam đoan đề tài “GIẢI PHÁP ỨNG DỰNG CÔNG NGHỆ CHUỖI KHỐI BLOCKCHAIN TRONG HỢP ĐỒNG THƠNG MINH CHO THANH TỐN XÂY DỰNG” tơi thực hướng dẫn PGS TS Phạm Vũ Hồng Sơn TS Phạm Hải Chiến Tất thông tin Luận văn thu thập trình bày theo quy tắc học thuật hành vi đạo đức Các kết Luận văn thật chưa công bố nghiên cứu khác Tôi xin chịu trách nhiệm cơng việc thực Tp Hồ Chí Minh, ngày tháng năm 2023 Võ Thanh Thiện v MỤC LỤC CHƯƠNG GIỚI THIỆU CHUNG 1.1 Lý chọn đề tài 1.2 Xác định mục tiêu nghiên cứu 1.3 Xác định phạm vi nghiên cứu 1.4 Đóng góp nghiên cứu 1.4.1 Trên phương diện học thuật 1.4.2 Trên phương diện thực tế CHƯƠNG 2.1 CƠ SỞ LÝ THUYẾT VÀ TỔNG QUAN NGHIÊN CỨU Các khái niệm định nghĩa 1.2.1.1 Quản lý hợp đồng xây dựng 2.1.2 Các bên liên quan toán hợp đồng 2.1.3 Thanh toán hợp đồng xây dựng theo tiến độ 2.2 Giới thiệu công nghệ Blockchain 10 2.3 Giới thiệu Hợp đồng thông minh 12 CHƯƠNG MƠ HÌNH TỰ ĐỘNG THANH TỐN CHI PHÍ XÂY DỰNG BẰNG HỢP ĐỒNG THÔNG MINH 16 3.1 Quản lý tiến độ, chi phí dự án phần mềm Microsoft Project 16 3.2 Quy trình vận hành tổng thể 17 3.2.1 Các giai đoạn quy trình quản lý Hợp đồng thơng minh 17 3.2.2 Quy trình vận hành tổng thể Hợp đồng thông minh 21 3.3 Chi tiết cấu trúc mơ hình tốn Hợp đồng thơng minh 22 3.4 Cơ chế thưởng phạt kết hợp vào Hợp đồng thông minh toán xây dựng 25 3.5 Chi tiết quy trình xây dựng Hợp đồng thông minh 29 3.5.1 Xây dựng addin MS Project 35 vi 3.5.2 Lưu trữ thông tin liệu tiến độ MongoDB 36 3.5.3 Thiết lập Cloud Server Digital Ocean để tính tốn chi phí tốn 37 3.5.4 Lập trình Hợp đồng thơng minh 38 3.5.5 Xây dựng website để thực giao dịch cập nhật tình hình dự án 44 3.6 Tích hợp mơ hình EVM - để quản lý dự án 48 3.6.1 Các thành phần EVM 48 3.6.2 Xây dựng Website hiển thị thông tin dự án phương pháp EVM 51 CHƯƠNG CASE STUDY 53 4.1 Giới thiệu tổng quan dự án 53 4.2 Tiến độ, chi phí theo kế hoạch theo kế hoạch dự án 54 4.3 Áp dụng quy trình tốn Hợp đồng thông minh 55 CHƯƠNG KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU TRONG TƯƠNG LAI 66 5.1 Kết luận 66 5.2 Các rào cản quy trình áp dụng thực tế 67 5.3 Hướng nghiên cứu tương lai 68 TÀI LIỆU THAM KHẢO 69 PHỤ LỤC 1: CHI TIẾT TỒN BỘ QUY TRÌNH THANH TỐN CỦA DỰ ÁN PREFAB HOUSE CONSTRUCTION 70 PHỤ LỤC 2: CHI TIẾT CODE TRONG SMART CONTRACT 86 PHỤ LỤC 3: CHI TIẾT CODE TRONG ADDIN TRONG MS PROJECT 93 PHỤ LỤC 4: CHI TIẾT CODE TRONG XỬ LÝ TRÊN CLOUD SERVER 98 PHỤ LỤC 5: CHI TIẾT CODE XỬ LÝ GIAO DIỆN WEBSITE 109 vii DANH MỤC HÌNH ẢNH Hình 3.1 Minh họa quản lý tiến độ, chi phí MS Project 17 Hình 3.2 Quy trình làm việc để quản lý hợp đồng thông minh .18 Hình 3.3 Quy trình tốn phân tích EVM 19 Hình 3.4 Cơ chế phân quyền cho người dùng google drive 20 Hình 3.5 Cấp quyền sử dụng cho người xem người nhận xét 20 Hình 3.6 Quy trình thực Hợp đồng thơng minh 21 Hình 3.7 Quy trình kiểm tra tốn tự động Hợp đồng thơng minh 24 Hình 3.8 Trách nhiệm công tác quy định theo nhà thầu 26 Hình 3.9 Pseudo-code quy trình tốn 27 Hình 3.10 Pseudo-code chế thưởng phạt .27 Hình 3.11 Lưu đồ chế thưởng phạt 28 Hình 3.12 Quy trình liên kết MS Project, Cloud Server, Smart Contract Website 29 Hình 3.13 Các thông tin thiết lập ban đầu MS Project 29 Hình 3.14 Giao diện tạo mốc Milestone vào Hợp đồng thơng minh 31 Hình 3.15 Chủ đầu tư xác nhận việc tạo mốc Milestone 32 Hình 3.16 Cập nhật thơng tin thực tế vào file MS Project 32 Hình 3.17 Thơng tin thực tế tính tốn hiển thị yêu cầu toán 33 Hình 3.18 Giao diện chấp nhận tốn chủ đầu tư .33 Hình 3.19 Giao diện chủ đầu tư rút tiền thừa tốn xong 34 Hình 3.20 Giao diện chi phí thực tế lớn lượng coin khóa .34 Hình 3.21 Thiết lập addin MS Project để liên kết với Server 35 Hình 3.22 Sử dụng Database MongoDB để lưu trữ liệu 36 Hình 3.23 Các thơng tin cần thiết công tác lưu trữ MongoDB 36 Hình 3.24 Sử dụng tảng Digital Ocean để thiết lập Cloud Server 38 Hình 3.25 Sử dụng ví Metamask để tương tác với mạng lưới Blockchain .39 viii setSearchParams({}); } }; const openRejectForm = () => { onOpen(); }; const handleSendReason = async (message: string) => { try { setLoading(true); await rejectPaymentCost(milestone); await notificationAPI.create({ address: milestone.wallet, name: milestone.name, content: message, type: MessageType.Payment, }); } catch (error) { } finally { setSearchParams({}); } //send noti db }; const isDisabledAccept = !milestone.isDeposit && Number(milestone.baselineCost) < Number(milestone.actualCost); return ( {islocked && milestone.state == State.Blocking ? ( Time remaining to unlock payment : {timer} ) : ( {isShowActual && ( Payment Amount USD ETH 141 Actual cost : {numberWithCommas(usdValue - bonusValue)} $ {bonusValue >= ? "Bonus" : "Punish"} : {numberWithCommas(bonusValue)} $ {numberWithCommas(usdValue)} {numberWithCommasDigit(actualCost)} {milestone.state == State.Complete ? ( ) : ( {isInvestor ? ( Accept Reject ) : ( {milestone.state != State.RequestPayment ? ( Request ) : ( )} )} 142 )} )} )} ); } 143 XỬ LÝ THÔNG TIN KHÁCH KHÀNG-USER INFO; import { UserInfo } from "@/models"; import { shortenAddress } from "@/utils"; import { Avatar, Divider, Flex, Heading, Popover, PopoverArrow, PopoverBody, PopoverContent, PopoverHeader, PopoverTrigger, Text, } from "@chakra-ui/react"; import { Setting } from "./Setting"; interface UserInfoAvatarProps { userInfo: UserInfo; } export function UserInfoAvatar({ userInfo }: UserInfoAvatarProps) { return ( {userInfo.name} Address : {shortenAddress(userInfo.address)} Wallet balance : {userInfo.balance} ETH {userInfo.isInvestor && ( Contract balance : {userInfo.contractBalance} ETH )} 144 ); } 145 XỬ LÝ DEPOSIT; import { ConstructionContext } from "@/contexts"; import { Milestone, State } from "@/models"; import { ETHToUSD, WeiToEth } from "@/utils"; import { Box, Button, FormControl, FormLabel, HStack, Input, Text } from "@chakra-ui/react"; import { useEffect, useState, useContext } from "react"; import { TiWarning } from "react-icons/ti"; import { useSearchParams } from "react-router-dom"; export interface IDepositProps { milestone: Milestone; } export function Deposit({ milestone }: IDepositProps) { const [usdValue, setusdValue] = useState(0); const [depositValue, setDepositValue] = useState(0); const { deposit, ETHUSD, setLoading } = useContext(ConstructionContext); const [searchParams, setSearchParams] = useSearchParams(); if (milestone.state != State.RequestPayment || milestone.isDeposit) return ; if (Number(milestone.baselineCost) >= Number(milestone.actualCost)) return ; useEffect(() => { const tolerance = 2000; const depositeth = WeiToEth(Number(milestone.actualCost) Number(milestone.baselineCost) + tolerance); setDepositValue(depositeth); setusdValue(ETHToUSD(depositeth, ETHUSD)); }, []); const handleDeposit = async () => { try { setLoading(true); await deposit(milestone, depositValue); setSearchParams({}); } catch (error) { console.log("🚀 ~ handleDeposit ~ error:", error); } }; return ( You need to deposit to contract USD 146 ETH Deposit ); } 147 XỬ LÝ RÚT TIỀN WITHDRAW; import { ConstructionContext } from "@/contexts"; import { Milestone, State } from "@/models"; import { ETHToUSD, WeiToEth } from "@/utils"; import { Box, Button, FormControl, FormLabel, HStack, Input, Text } from "@chakra-ui/react"; import { useContext, useEffect, useState } from "react"; import { TbInfoSquareRoundedFilled } from "react-icons/tb"; import { useSearchParams } from "react-router-dom"; export interface WithDrawProps { milestone: Milestone; } export function WithDraw({ milestone }: WithDrawProps) { const [usdValue, setusdValue] = useState(0); const [withDrawValue, setWithDrawValue] = useState(0); const { withDraw, ETHUSD, setLoading } = useContext(ConstructionContext); const [searchParams, setSearchParams] = useSearchParams(); if (milestone.state != State.Complete || (milestone.isWithDraw && milestone.state == State.Complete)) return ; if (Number(milestone.baselineCost) < Number(milestone.actualCost)) return ; useEffect(() => { const withDrawEth = WeiToEth(Number(milestone.baselineCost) Number(milestone.actualCost)); setWithDrawValue(withDrawEth); setusdValue(ETHToUSD(withDrawEth, ETHUSD)); }, []); const handleWithDraw = async () => { setLoading(true); await withDraw(milestone); setSearchParams({}); }; return ( You can withdraw the remaining value in the milestone USD ETH 148 With Draw ); } 149 THÔNG TIN HIỂN THỊ TRONG MILESTONE INFO; import { milestoneAPI, notificationAPI } from "@/api"; import { ConstructionContext } from "@/contexts"; import { CostDetailProps, MessageType, State } from "@/models"; import { USDToETH, WeiToEth, WeiToUSD, countDownTimer, numberWithCommas, numberWithCommasDigit } from "@/utils"; import { Box, Button, Grid, GridItem, HStack, Text, useDisclosure, useToast } from "@chakra-ui/react"; import { useContext, useEffect, useState } from "react"; import { useSearchParams } from "react-router-dom"; import { CompleteIcon } from "./CompleteIcon"; import { PendingBadge } from "./PendingBadge"; import { RejectReason } from "./RejectReason"; import { oneHour } from "@/constants"; export function ActualCost({ milestone, isInvestor, onMilestoneInfoClose }: CostDetailProps) { const [timer, setTimer] = useState("Calculating "); const [searchParams, setSearchParams] = useSearchParams(); const [usdValue, setusdValue] = useState(0); const [actualCost, setActualCost] = useState(0); const [bonusValue, setBonusValue] = useState(0); const { requestPaymentCost, acceptPaymentCost, rejectPaymentCost, userInfo, setLoading, ETHUSD } = useContext(ConstructionContext); const { isOpen, onOpen, onClose } = useDisclosure(); const toast = useToast(); if (!userInfo) return ; const isShowActual = isInvestor ? milestone.state == State.RequestPayment || milestone.state == State.Complete : milestone.state != State.RequestBlock; const unlockDate = new Date(milestone.unlockDate); // localhost use +6, deployment use -1 unlockDate.setTime(unlockDate.getTime() - * oneHour); const timeUnlockDate = unlockDate.getTime(); const testUnlockDate = milestone.testunlockDate; const currentTime = new Date().getTime(); const islocked = milestone.testunlockDate > 1000 ? testUnlockDate > currentTime : milestone.unlockDate > currentTime; useEffect(() => { let interval: any; if (islocked) { const countTime = milestone.testunlockDate > 1000 ? milestone.testunlockDate : timeUnlockDate; interval = setInterval(() => { setTimer(countDownTimer(countTime)); }, 1000); } return () => { clearInterval(interval); }; 150 }, []); useEffect(() => { if (milestone.state == State.Blocking) { //get from db const localpayload = { uniqueId: userInfo.projectId, contractor: userInfo.name, start: new Date(Number(milestone.startDate)).toISOString(), finish: new Date(Number(milestone.unlockDate)).toISOString(), milestoneKey: milestone.key, }; milestoneAPI getActualCost(localpayload) then((res) => { setusdValue(res.actualCost); setActualCost(USDToETH(res.actualCost, ETHUSD)); setBonusValue(res.bonusCost); }) catch((err) => { toast({ title: "Error", description: "The MS Project Data not found", status: "error", duration: 5000, isClosable: true, position: "top-right", }); }); } else { setActualCost(WeiToEth(milestone.actualCost)); setusdValue(WeiToUSD(milestone.actualCost, ETHUSD)); const bonus = milestone.isBonus ? milestone.bonus : milestone.bonus; setBonusValue(bonus); } }, []); const handleAcceptOrRequest = async () => { try { onMilestoneInfoClose(); setLoading(true); if (isInvestor) { await acceptPaymentCost(milestone); } else { await requestPaymentCost(milestone, actualCost, bonusValue); } } catch (error) { console.log("🚀 ~ handleAcceptOrRequest ~ error:", error); setLoading(false); toast({ title: "Error", description: "Something wrong, please try after few seconds", status: "error", duration: 5000, isClosable: true, position: "top-right", }); } finally { 151 setSearchParams({}); } }; const openRejectForm = () => { onOpen(); }; const handleSendReason = async (message: string) => { try { setLoading(true); await rejectPaymentCost(milestone); await notificationAPI.create({ address: milestone.wallet, name: milestone.name, content: message, type: MessageType.Payment, }); } catch (error) { } finally { setSearchParams({}); } //send noti db }; const isDisabledAccept = !milestone.isDeposit && Number(milestone.baselineCost) < Number(milestone.actualCost); return ( {islocked && milestone.state == State.Blocking ? ( Time remaining to unlock payment : {timer} ) : ( {isShowActual && ( Payment Amount USD ETH 152 Actual cost : {numberWithCommas(usdValue - bonusValue)} $ {bonusValue >= ? "Bonus" : "Punish"} : {numberWithCommas(bonusValue)} $ {numberWithCommas(usdValue)} {numberWithCommasDigit(actualCost)} {milestone.state == State.Complete ? ( ) : ( {isInvestor ? ( Accept Reject ) : ( {milestone.state != State.RequestPayment ? ( Request ) : ( )} )} 153 )} )} )} ); } 154 PHẦN LÝ LỊCH TRÍCH NGANG Họ tên: VÕ THANH THIỆN Ngày, tháng, năm sinh: 06/12/1992 Nơi sinh: Đồng Nai Địa liên lạc: Chung cư Saigonland, phường 25, quận Bình Thạnh, TP HCM Email: vothanhthienbk@gmail.com Sđt: 0962865402 QUÁ TRÌNH ĐÀO TẠO Từ 2011 đến năm 2016: Đại học quy chuyên ngành Xây dựng Dân dụng Công nghiệp, trường Đại Học Bách Khoa TPHCM Từ 2021 - 2023: Học viên cao học ngành Quản lý xây dựng – Trường Đại học Bách Khoa TP HCM Q TRÌNH CƠNG TÁC Từ 2017 - 2020: Kĩ sư quản lý công trường cho công ty Iwata Chizaki, Hokkaido, Nhật Bản Từ 2020 đến nay: quản lý cho team thiết kế vẽ BIM, công ty Studio Nao Việt Nam 155

Ngày đăng: 25/10/2023, 22:18

Tài liệu cùng người dùng

Tài liệu liên quan