diff --git a/2017/data/raw/10_BinhThuan_RIIW.xls.xlsx b/2017/data/10_BinhThuan_RIIW.xls.xlsx similarity index 100% rename from 2017/data/raw/10_BinhThuan_RIIW.xls.xlsx rename to 2017/data/10_BinhThuan_RIIW.xls.xlsx diff --git a/2017/data/raw/10_Ca_Mau_BKXT.xls.xlsx b/2017/data/10_Ca_Mau_BKXT.xls.xlsx similarity index 100% rename from 2017/data/raw/10_Ca_Mau_BKXT.xls.xlsx rename to 2017/data/10_Ca_Mau_BKXT.xls.xlsx diff --git a/2017/data/raw/10_LamDong_GNFT.xls.xlsx b/2017/data/10_LamDong_GNFT.xls.xlsx similarity index 100% rename from 2017/data/raw/10_LamDong_GNFT.xls.xlsx rename to 2017/data/10_LamDong_GNFT.xls.xlsx diff --git a/2017/data/raw/10_Soc_Trang_XCGJ.xls.xlsx b/2017/data/10_Soc_Trang_XCGJ.xls.xlsx similarity index 100% rename from 2017/data/raw/10_Soc_Trang_XCGJ.xls.xlsx rename to 2017/data/10_Soc_Trang_XCGJ.xls.xlsx diff --git a/2017/data/raw/11_BinhDuong_RYQL.xls.xlsx b/2017/data/11_BinhDuong_RYQL.xls.xlsx similarity index 100% rename from 2017/data/raw/11_BinhDuong_RYQL.xls.xlsx rename to 2017/data/11_BinhDuong_RYQL.xls.xlsx diff --git a/2017/data/raw/11_LaoCai_GMSU.xls.xlsx b/2017/data/11_LaoCai_GMSU.xls.xlsx similarity index 100% rename from 2017/data/raw/11_LaoCai_GMSU.xls.xlsx rename to 2017/data/11_LaoCai_GMSU.xls.xlsx diff --git a/2017/data/raw/12_BenTre_DKWF.xls.xlsx b/2017/data/12_BenTre_DKWF.xls.xlsx similarity index 100% rename from 2017/data/raw/12_BenTre_DKWF.xls.xlsx rename to 2017/data/12_BenTre_DKWF.xls.xlsx diff --git a/2017/data/raw/12_LongAn_ZZUK.xls.xlsx b/2017/data/12_LongAn_ZZUK.xls.xlsx similarity index 100% rename from 2017/data/raw/12_LongAn_ZZUK.xls.xlsx rename to 2017/data/12_LongAn_ZZUK.xls.xlsx diff --git a/2017/data/raw/13_NamDinh_ESEL.xls.xlsx b/2017/data/13_NamDinh_ESEL.xls.xlsx similarity index 100% rename from 2017/data/raw/13_NamDinh_ESEL.xls.xlsx rename to 2017/data/13_NamDinh_ESEL.xls.xlsx diff --git a/2017/data/raw/13_TraVinh_LKUJ.xls.xlsx b/2017/data/13_TraVinh_LKUJ.xls.xlsx similarity index 100% rename from 2017/data/raw/13_TraVinh_LKUJ.xls.xlsx rename to 2017/data/13_TraVinh_LKUJ.xls.xlsx diff --git a/2017/data/raw/14_NgheAn_BSLY.xls.xlsx b/2017/data/14_NgheAn_BSLY.xls.xlsx similarity index 100% rename from 2017/data/raw/14_NgheAn_BSLY.xls.xlsx rename to 2017/data/14_NgheAn_BSLY.xls.xlsx diff --git a/2017/data/raw/15_PhuTho_ABWQ.xls.xlsx b/2017/data/15_PhuTho_ABWQ.xls.xlsx similarity index 100% rename from 2017/data/raw/15_PhuTho_ABWQ.xls.xlsx rename to 2017/data/15_PhuTho_ABWQ.xls.xlsx diff --git a/2017/data/raw/16_QuangBinh_KGEU.xls.xlsx b/2017/data/16_QuangBinh_KGEU.xls.xlsx similarity index 100% rename from 2017/data/raw/16_QuangBinh_KGEU.xls.xlsx rename to 2017/data/16_QuangBinh_KGEU.xls.xlsx diff --git a/2017/data/raw/17_QuangNam_AMTK.xls.xlsx b/2017/data/17_QuangNam_AMTK.xls.xlsx similarity index 100% rename from 2017/data/raw/17_QuangNam_AMTK.xls.xlsx rename to 2017/data/17_QuangNam_AMTK.xls.xlsx diff --git a/2017/data/raw/18_QuangNgai_KOFP.xls.xlsx b/2017/data/18_QuangNgai_KOFP.xls.xlsx similarity index 100% rename from 2017/data/raw/18_QuangNgai_KOFP.xls.xlsx rename to 2017/data/18_QuangNgai_KOFP.xls.xlsx diff --git a/2017/data/raw/19_QuangTri_OMZF.xls.xlsx b/2017/data/19_QuangTri_OMZF.xls.xlsx similarity index 100% rename from 2017/data/raw/19_QuangTri_OMZF.xls.xlsx rename to 2017/data/19_QuangTri_OMZF.xls.xlsx diff --git a/2017/data/raw/1_BaRia_VungTau_HJKG.xls.xlsx b/2017/data/1_BaRia_VungTau_HJKG.xls.xlsx similarity index 100% rename from 2017/data/raw/1_BaRia_VungTau_HJKG.xls.xlsx rename to 2017/data/1_BaRia_VungTau_HJKG.xls.xlsx diff --git a/2017/data/raw/1_Da_Nang_AHWJ.xls.xlsx b/2017/data/1_Da_Nang_AHWJ.xls.xlsx similarity index 100% rename from 2017/data/raw/1_Da_Nang_AHWJ.xls.xlsx rename to 2017/data/1_Da_Nang_AHWJ.xls.xlsx diff --git a/2017/data/raw/1_Ha_Noi_CVXG.xls.xlsx b/2017/data/1_Ha_Noi_CVXG.xls.xlsx similarity index 100% rename from 2017/data/raw/1_Ha_Noi_CVXG.xls.xlsx rename to 2017/data/1_Ha_Noi_CVXG.xls.xlsx diff --git a/2017/data/raw/1_Son_La_JIDP.xls.xlsx b/2017/data/1_Son_La_JIDP.xls.xlsx similarity index 100% rename from 2017/data/raw/1_Son_La_JIDP.xls.xlsx rename to 2017/data/1_Son_La_JIDP.xls.xlsx diff --git a/2017/data/raw/1_TuyenQuang_JBYF.xls.xlsx b/2017/data/1_TuyenQuang_JBYF.xls.xlsx similarity index 100% rename from 2017/data/raw/1_TuyenQuang_JBYF.xls.xlsx rename to 2017/data/1_TuyenQuang_JBYF.xls.xlsx diff --git a/2017/data/raw/20_TayNinh_ILFA.xls.xlsx b/2017/data/20_TayNinh_ILFA.xls.xlsx similarity index 100% rename from 2017/data/raw/20_TayNinh_ILFA.xls.xlsx rename to 2017/data/20_TayNinh_ILFA.xls.xlsx diff --git a/2017/data/raw/21_ThaiBinh_FTVG.xls.xlsx b/2017/data/21_ThaiBinh_FTVG.xls.xlsx similarity index 100% rename from 2017/data/raw/21_ThaiBinh_FTVG.xls.xlsx rename to 2017/data/21_ThaiBinh_FTVG.xls.xlsx diff --git a/2017/data/raw/22_ThaiNguyen_TLTW.xls.xlsx b/2017/data/22_ThaiNguyen_TLTW.xls.xlsx similarity index 100% rename from 2017/data/raw/22_ThaiNguyen_TLTW.xls.xlsx rename to 2017/data/22_ThaiNguyen_TLTW.xls.xlsx diff --git a/2017/data/raw/23_HaiPhong_HXBV.xls.xlsx b/2017/data/23_HaiPhong_HXBV.xls.xlsx similarity index 100% rename from 2017/data/raw/23_HaiPhong_HXBV.xls.xlsx rename to 2017/data/23_HaiPhong_HXBV.xls.xlsx diff --git a/2017/data/raw/24_HCM_XULN.xls.xlsx b/2017/data/24_HCM_XULN.xls.xlsx similarity index 100% rename from 2017/data/raw/24_HCM_XULN.xls.xlsx rename to 2017/data/24_HCM_XULN.xls.xlsx diff --git a/2017/data/raw/2_BacKan_GFVQ.xls.xlsx b/2017/data/2_BacKan_GFVQ.xls.xlsx similarity index 100% rename from 2017/data/raw/2_BacKan_GFVQ.xls.xlsx rename to 2017/data/2_BacKan_GFVQ.xls.xlsx diff --git a/2017/data/raw/2_Ha_Giang_QNCM.xls.xlsx b/2017/data/2_Ha_Giang_QNCM.xls.xlsx similarity index 100% rename from 2017/data/raw/2_Ha_Giang_QNCM.xls.xlsx rename to 2017/data/2_Ha_Giang_QNCM.xls.xlsx diff --git a/2017/data/raw/2_Ninh_Thuan_VHLY.xls.xlsx b/2017/data/2_Ninh_Thuan_VHLY.xls.xlsx similarity index 100% rename from 2017/data/raw/2_Ninh_Thuan_VHLY.xls.xlsx rename to 2017/data/2_Ninh_Thuan_VHLY.xls.xlsx diff --git a/2017/data/raw/2_Thanh_Hoa_AUFV.xls.xlsx b/2017/data/2_Thanh_Hoa_AUFV.xls.xlsx similarity index 100% rename from 2017/data/raw/2_Thanh_Hoa_AUFV.xls.xlsx rename to 2017/data/2_Thanh_Hoa_AUFV.xls.xlsx diff --git a/2017/data/raw/2_VinhPhuc_GUDK.xls.xlsx b/2017/data/2_VinhPhuc_GUDK.xls.xlsx similarity index 100% rename from 2017/data/raw/2_VinhPhuc_GUDK.xls.xlsx rename to 2017/data/2_VinhPhuc_GUDK.xls.xlsx diff --git a/2017/data/raw/3_BacGiang_TOIF.xls.xlsx b/2017/data/3_BacGiang_TOIF.xls.xlsx similarity index 100% rename from 2017/data/raw/3_BacGiang_TOIF.xls.xlsx rename to 2017/data/3_BacGiang_TOIF.xls.xlsx diff --git a/2017/data/raw/3_BinhPhuoc_YFMU.xls.xlsx b/2017/data/3_BinhPhuoc_YFMU.xls.xlsx similarity index 100% rename from 2017/data/raw/3_BinhPhuoc_YFMU.xls.xlsx rename to 2017/data/3_BinhPhuoc_YFMU.xls.xlsx diff --git a/2017/data/raw/3_Cao_Bang_CIEY.xls.xlsx b/2017/data/3_Cao_Bang_CIEY.xls.xlsx similarity index 100% rename from 2017/data/raw/3_Cao_Bang_CIEY.xls.xlsx rename to 2017/data/3_Cao_Bang_CIEY.xls.xlsx diff --git a/2017/data/raw/3_Dong_Thap_GSXQ.xls.xlsx b/2017/data/3_Dong_Thap_GSXQ.xls.xlsx similarity index 100% rename from 2017/data/raw/3_Dong_Thap_GSXQ.xls.xlsx rename to 2017/data/3_Dong_Thap_GSXQ.xls.xlsx diff --git a/2017/data/raw/3_Thua_Thien_Hue_HMDB.xls.xlsx b/2017/data/3_Thua_Thien_Hue_HMDB.xls.xlsx similarity index 100% rename from 2017/data/raw/3_Thua_Thien_Hue_HMDB.xls.xlsx rename to 2017/data/3_Thua_Thien_Hue_HMDB.xls.xlsx diff --git a/2017/data/raw/4_An_Giang_JNOS.xls.xlsx b/2017/data/4_An_Giang_JNOS.xls.xlsx similarity index 100% rename from 2017/data/raw/4_An_Giang_JNOS.xls.xlsx rename to 2017/data/4_An_Giang_JNOS.xls.xlsx diff --git a/2017/data/raw/4_BacNinh_STLR.xls.xlsx b/2017/data/4_BacNinh_STLR.xls.xlsx similarity index 100% rename from 2017/data/raw/4_BacNinh_STLR.xls.xlsx rename to 2017/data/4_BacNinh_STLR.xls.xlsx diff --git a/2017/data/raw/4_Binh_Dinh_WWZW.xls.xlsx b/2017/data/4_Binh_Dinh_WWZW.xls.xlsx similarity index 100% rename from 2017/data/raw/4_Binh_Dinh_WWZW.xls.xlsx rename to 2017/data/4_Binh_Dinh_WWZW.xls.xlsx diff --git a/2017/data/raw/4_DienBien_SOJG.xls.xlsx b/2017/data/4_DienBien_SOJG.xls.xlsx similarity index 100% rename from 2017/data/raw/4_DienBien_SOJG.xls.xlsx rename to 2017/data/4_DienBien_SOJG.xls.xlsx diff --git a/2017/data/raw/4_Lang_Son_NYQL.xls.xlsx b/2017/data/4_Lang_Son_NYQL.xls.xlsx similarity index 100% rename from 2017/data/raw/4_Lang_Son_NYQL.xls.xlsx rename to 2017/data/4_Lang_Son_NYQL.xls.xlsx diff --git a/2017/data/raw/5_Bac_Lieu_XEKH.xls.xlsx b/2017/data/5_Bac_Lieu_XEKH.xls.xlsx similarity index 100% rename from 2017/data/raw/5_Bac_Lieu_XEKH.xls.xlsx rename to 2017/data/5_Bac_Lieu_XEKH.xls.xlsx diff --git a/2017/data/raw/5_Gia_Lai_ABZI.xls.xlsx b/2017/data/5_Gia_Lai_ABZI.xls.xlsx similarity index 100% rename from 2017/data/raw/5_Gia_Lai_ABZI.xls.xlsx rename to 2017/data/5_Gia_Lai_ABZI.xls.xlsx diff --git a/2017/data/raw/5_HaiDuong_WWWG.xls.xlsx b/2017/data/5_HaiDuong_WWWG.xls.xlsx similarity index 100% rename from 2017/data/raw/5_HaiDuong_WWWG.xls.xlsx rename to 2017/data/5_HaiDuong_WWWG.xls.xlsx diff --git a/2017/data/raw/5_Hanam_QGJS.xls.xlsx b/2017/data/5_Hanam_QGJS.xls.xlsx similarity index 100% rename from 2017/data/raw/5_Hanam_QGJS.xls.xlsx rename to 2017/data/5_Hanam_QGJS.xls.xlsx diff --git a/2017/data/raw/5_Yen_Bai_FAQR.xls.xlsx b/2017/data/5_Yen_Bai_FAQR.xls.xlsx similarity index 100% rename from 2017/data/raw/5_Yen_Bai_FAQR.xls.xlsx rename to 2017/data/5_Yen_Bai_FAQR.xls.xlsx diff --git a/2017/data/raw/6_Dong_Nai_WOTM.xls.xlsx b/2017/data/6_Dong_Nai_WOTM.xls.xlsx similarity index 100% rename from 2017/data/raw/6_Dong_Nai_WOTM.xls.xlsx rename to 2017/data/6_Dong_Nai_WOTM.xls.xlsx diff --git a/2017/data/raw/6_Hau_Giang_KWDM.xls.xlsx b/2017/data/6_Hau_Giang_KWDM.xls.xlsx similarity index 100% rename from 2017/data/raw/6_Hau_Giang_KWDM.xls.xlsx rename to 2017/data/6_Hau_Giang_KWDM.xls.xlsx diff --git a/2017/data/raw/6_HoaBinh_TPZY.xls.xlsx b/2017/data/6_HoaBinh_TPZY.xls.xlsx similarity index 100% rename from 2017/data/raw/6_HoaBinh_TPZY.xls.xlsx rename to 2017/data/6_HoaBinh_TPZY.xls.xlsx diff --git a/2017/data/raw/6_NinhBinh_IGFT.xls.xlsx b/2017/data/6_NinhBinh_IGFT.xls.xlsx similarity index 100% rename from 2017/data/raw/6_NinhBinh_IGFT.xls.xlsx rename to 2017/data/6_NinhBinh_IGFT.xls.xlsx diff --git a/2017/data/raw/6_Quang_Ninh_DQCJ.xls.xlsx b/2017/data/6_Quang_Ninh_DQCJ.xls.xlsx similarity index 100% rename from 2017/data/raw/6_Quang_Ninh_DQCJ.xls.xlsx rename to 2017/data/6_Quang_Ninh_DQCJ.xls.xlsx diff --git a/2017/data/raw/7_HaTinh_DDHD.xls.xlsx b/2017/data/7_HaTinh_DDHD.xls.xlsx similarity index 100% rename from 2017/data/raw/7_HaTinh_DDHD.xls.xlsx rename to 2017/data/7_HaTinh_DDHD.xls.xlsx diff --git a/2017/data/raw/7_HungYen_LTIK.xls.xlsx b/2017/data/7_HungYen_LTIK.xls.xlsx similarity index 100% rename from 2017/data/raw/7_HungYen_LTIK.xls.xlsx rename to 2017/data/7_HungYen_LTIK.xls.xlsx diff --git a/2017/data/raw/7_Kon_Tum_RSLR.xls.xlsx b/2017/data/7_Kon_Tum_RSLR.xls.xlsx similarity index 100% rename from 2017/data/raw/7_Kon_Tum_RSLR.xls.xlsx rename to 2017/data/7_Kon_Tum_RSLR.xls.xlsx diff --git a/2017/data/raw/7_Tien_Giang_EFHX.xls.xlsx b/2017/data/7_Tien_Giang_EFHX.xls.xlsx similarity index 100% rename from 2017/data/raw/7_Tien_Giang_EFHX.xls.xlsx rename to 2017/data/7_Tien_Giang_EFHX.xls.xlsx diff --git a/2017/data/raw/8_Can_Tho_RQZM.xls.xlsx b/2017/data/8_Can_Tho_RQZM.xls.xlsx similarity index 100% rename from 2017/data/raw/8_Can_Tho_RQZM.xls.xlsx rename to 2017/data/8_Can_Tho_RQZM.xls.xlsx diff --git a/2017/data/raw/8_Dak_Lak_YKPR.xls.xlsx b/2017/data/8_Dak_Lak_YKPR.xls.xlsx similarity index 100% rename from 2017/data/raw/8_Dak_Lak_YKPR.xls.xlsx rename to 2017/data/8_Dak_Lak_YKPR.xls.xlsx diff --git a/2017/data/raw/8_KienGiang_OTOB.xls.xlsx b/2017/data/8_KienGiang_OTOB.xls.xlsx similarity index 100% rename from 2017/data/raw/8_KienGiang_OTOB.xls.xlsx rename to 2017/data/8_KienGiang_OTOB.xls.xlsx diff --git a/2017/data/raw/8_PhuYen_OGIM.xls.xlsx b/2017/data/8_PhuYen_OGIM.xls.xlsx similarity index 100% rename from 2017/data/raw/8_PhuYen_OGIM.xls.xlsx rename to 2017/data/8_PhuYen_OGIM.xls.xlsx diff --git a/2017/data/raw/9_DakNong_FBOP.xls.xlsx b/2017/data/9_DakNong_FBOP.xls.xlsx similarity index 100% rename from 2017/data/raw/9_DakNong_FBOP.xls.xlsx rename to 2017/data/9_DakNong_FBOP.xls.xlsx diff --git a/2017/data/raw/9_Khanh_Hoa_KPKQ.xls.xlsx b/2017/data/9_Khanh_Hoa_KPKQ.xls.xlsx similarity index 100% rename from 2017/data/raw/9_Khanh_Hoa_KPKQ.xls.xlsx rename to 2017/data/9_Khanh_Hoa_KPKQ.xls.xlsx diff --git a/2017/data/raw/9_LaiChau_ALKN.xls.xlsx b/2017/data/9_LaiChau_ALKN.xls.xlsx similarity index 100% rename from 2017/data/raw/9_LaiChau_ALKN.xls.xlsx rename to 2017/data/9_LaiChau_ALKN.xls.xlsx diff --git a/2017/data/raw/9_Vinh_Long_OLWA.xls.xlsx b/2017/data/9_Vinh_Long_OLWA.xls.xlsx similarity index 100% rename from 2017/data/raw/9_Vinh_Long_OLWA.xls.xlsx rename to 2017/data/9_Vinh_Long_OLWA.xls.xlsx diff --git a/2017/data/raw/update/1.BaRia-VungTau_PGZT.xlsx b/2017/data/raw/update/1.BaRia-VungTau_PGZT.xlsx deleted file mode 100644 index 3a26735..0000000 Binary files a/2017/data/raw/update/1.BaRia-VungTau_PGZT.xlsx and /dev/null differ diff --git a/2017/data/raw/update/1.Da Nang_ABWU.xlsx b/2017/data/raw/update/1.Da Nang_ABWU.xlsx deleted file mode 100644 index 5396aef..0000000 Binary files a/2017/data/raw/update/1.Da Nang_ABWU.xlsx and /dev/null differ diff --git a/2017/data/raw/update/1.Son La_XLFN.xlsx b/2017/data/raw/update/1.Son La_XLFN.xlsx deleted file mode 100644 index 7eafde3..0000000 Binary files a/2017/data/raw/update/1.Son La_XLFN.xlsx and /dev/null differ diff --git a/2017/data/raw/update/1.TuyenQuang_PTMR.xlsx b/2017/data/raw/update/1.TuyenQuang_PTMR.xlsx deleted file mode 100644 index 06f7c27..0000000 Binary files a/2017/data/raw/update/1.TuyenQuang_PTMR.xlsx and /dev/null differ diff --git a/2017/data/raw/update/10.BinhThuan_MVVG.xlsx b/2017/data/raw/update/10.BinhThuan_MVVG.xlsx deleted file mode 100644 index 8cabd6d..0000000 Binary files a/2017/data/raw/update/10.BinhThuan_MVVG.xlsx and /dev/null differ diff --git a/2017/data/raw/update/10.LamDong_YUQA.xlsx b/2017/data/raw/update/10.LamDong_YUQA.xlsx deleted file mode 100644 index e4debd8..0000000 Binary files a/2017/data/raw/update/10.LamDong_YUQA.xlsx and /dev/null differ diff --git a/2017/data/raw/update/10.Soc Trang_LQWU.xlsx b/2017/data/raw/update/10.Soc Trang_LQWU.xlsx deleted file mode 100644 index c8cd707..0000000 Binary files a/2017/data/raw/update/10.Soc Trang_LQWU.xlsx and /dev/null differ diff --git a/2017/data/raw/update/11.BinhDuong_HVAH.xlsx b/2017/data/raw/update/11.BinhDuong_HVAH.xlsx deleted file mode 100644 index 8b3f7ad..0000000 Binary files a/2017/data/raw/update/11.BinhDuong_HVAH.xlsx and /dev/null differ diff --git a/2017/data/raw/update/11.LaoCai_ZTBP.xlsx b/2017/data/raw/update/11.LaoCai_ZTBP.xlsx deleted file mode 100644 index 63870d1..0000000 Binary files a/2017/data/raw/update/11.LaoCai_ZTBP.xlsx and /dev/null differ diff --git a/2017/data/raw/update/12.BenTre_NQTU.xlsx b/2017/data/raw/update/12.BenTre_NQTU.xlsx deleted file mode 100644 index ae9edb4..0000000 Binary files a/2017/data/raw/update/12.BenTre_NQTU.xlsx and /dev/null differ diff --git a/2017/data/raw/update/12.LongAn_PDRH.xlsx b/2017/data/raw/update/12.LongAn_PDRH.xlsx deleted file mode 100644 index e0b66c8..0000000 Binary files a/2017/data/raw/update/12.LongAn_PDRH.xlsx and /dev/null differ diff --git a/2017/data/raw/update/13.NamDinh_NAYR.xlsx b/2017/data/raw/update/13.NamDinh_NAYR.xlsx deleted file mode 100644 index b16ead2..0000000 Binary files a/2017/data/raw/update/13.NamDinh_NAYR.xlsx and /dev/null differ diff --git a/2017/data/raw/update/13.TraVinh_FODZ.xlsx b/2017/data/raw/update/13.TraVinh_FODZ.xlsx deleted file mode 100644 index eb2c6ce..0000000 Binary files a/2017/data/raw/update/13.TraVinh_FODZ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/14.NgheAn_HTKD.xlsx b/2017/data/raw/update/14.NgheAn_HTKD.xlsx deleted file mode 100644 index f872da1..0000000 Binary files a/2017/data/raw/update/14.NgheAn_HTKD.xlsx and /dev/null differ diff --git a/2017/data/raw/update/15.PhuTho_IJZW.xlsx b/2017/data/raw/update/15.PhuTho_IJZW.xlsx deleted file mode 100644 index e075d3a..0000000 Binary files a/2017/data/raw/update/15.PhuTho_IJZW.xlsx and /dev/null differ diff --git a/2017/data/raw/update/17.QuangNam_NQMG.xlsx b/2017/data/raw/update/17.QuangNam_NQMG.xlsx deleted file mode 100644 index 3e75262..0000000 Binary files a/2017/data/raw/update/17.QuangNam_NQMG.xlsx and /dev/null differ diff --git a/2017/data/raw/update/18.QuangNgai_IUPY.xlsx b/2017/data/raw/update/18.QuangNgai_IUPY.xlsx deleted file mode 100644 index 5e37ea2..0000000 Binary files a/2017/data/raw/update/18.QuangNgai_IUPY.xlsx and /dev/null differ diff --git a/2017/data/raw/update/19.QuangTri_MKNN.xlsx b/2017/data/raw/update/19.QuangTri_MKNN.xlsx deleted file mode 100644 index 454256c..0000000 Binary files a/2017/data/raw/update/19.QuangTri_MKNN.xlsx and /dev/null differ diff --git a/2017/data/raw/update/2.BacKan_YQNX.xlsx b/2017/data/raw/update/2.BacKan_YQNX.xlsx deleted file mode 100644 index 6fa41c9..0000000 Binary files a/2017/data/raw/update/2.BacKan_YQNX.xlsx and /dev/null differ diff --git a/2017/data/raw/update/2.Ha Giang_PIYK.xlsx b/2017/data/raw/update/2.Ha Giang_PIYK.xlsx deleted file mode 100644 index d65b471..0000000 Binary files a/2017/data/raw/update/2.Ha Giang_PIYK.xlsx and /dev/null differ diff --git a/2017/data/raw/update/2.Ninh Thuan_BAGG.xlsx b/2017/data/raw/update/2.Ninh Thuan_BAGG.xlsx deleted file mode 100644 index a77706b..0000000 Binary files a/2017/data/raw/update/2.Ninh Thuan_BAGG.xlsx and /dev/null differ diff --git a/2017/data/raw/update/2.Thanh Hoa_UOPE.xlsx b/2017/data/raw/update/2.Thanh Hoa_UOPE.xlsx deleted file mode 100644 index d40be28..0000000 Binary files a/2017/data/raw/update/2.Thanh Hoa_UOPE.xlsx and /dev/null differ diff --git a/2017/data/raw/update/2.VinhPhuc_QZJK.xlsx b/2017/data/raw/update/2.VinhPhuc_QZJK.xlsx deleted file mode 100644 index be86a48..0000000 Binary files a/2017/data/raw/update/2.VinhPhuc_QZJK.xlsx and /dev/null differ diff --git a/2017/data/raw/update/20.TayNinh_KJAQ.xlsx b/2017/data/raw/update/20.TayNinh_KJAQ.xlsx deleted file mode 100644 index 65eedff..0000000 Binary files a/2017/data/raw/update/20.TayNinh_KJAQ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/21.ThaiBinh_KTQN.xlsx b/2017/data/raw/update/21.ThaiBinh_KTQN.xlsx deleted file mode 100644 index 02a3895..0000000 Binary files a/2017/data/raw/update/21.ThaiBinh_KTQN.xlsx and /dev/null differ diff --git a/2017/data/raw/update/22.ThaiNguyen_BKIF.xlsx b/2017/data/raw/update/22.ThaiNguyen_BKIF.xlsx deleted file mode 100644 index a144e9c..0000000 Binary files a/2017/data/raw/update/22.ThaiNguyen_BKIF.xlsx and /dev/null differ diff --git a/2017/data/raw/update/24.HCM_UTLQ.xlsx b/2017/data/raw/update/24.HCM_UTLQ.xlsx deleted file mode 100644 index cc42e51..0000000 Binary files a/2017/data/raw/update/24.HCM_UTLQ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/3.BacGiang_SAVS.xlsx b/2017/data/raw/update/3.BacGiang_SAVS.xlsx deleted file mode 100644 index bc9b5f6..0000000 Binary files a/2017/data/raw/update/3.BacGiang_SAVS.xlsx and /dev/null differ diff --git a/2017/data/raw/update/3.BinhPhuoc_IPHL.xlsx b/2017/data/raw/update/3.BinhPhuoc_IPHL.xlsx deleted file mode 100644 index 8c5871d..0000000 Binary files a/2017/data/raw/update/3.BinhPhuoc_IPHL.xlsx and /dev/null differ diff --git a/2017/data/raw/update/3.Cao Bang_WMUU.xlsx b/2017/data/raw/update/3.Cao Bang_WMUU.xlsx deleted file mode 100644 index 36200fb..0000000 Binary files a/2017/data/raw/update/3.Cao Bang_WMUU.xlsx and /dev/null differ diff --git a/2017/data/raw/update/3.Dong Thap_HKJX.xlsx b/2017/data/raw/update/3.Dong Thap_HKJX.xlsx deleted file mode 100644 index ae37166..0000000 Binary files a/2017/data/raw/update/3.Dong Thap_HKJX.xlsx and /dev/null differ diff --git a/2017/data/raw/update/3.Thua Thien -Hue_MAET.xlsx b/2017/data/raw/update/3.Thua Thien -Hue_MAET.xlsx deleted file mode 100644 index 587af78..0000000 Binary files a/2017/data/raw/update/3.Thua Thien -Hue_MAET.xlsx and /dev/null differ diff --git a/2017/data/raw/update/4.An Giang_PMJD.xlsx b/2017/data/raw/update/4.An Giang_PMJD.xlsx deleted file mode 100644 index b651ffb..0000000 Binary files a/2017/data/raw/update/4.An Giang_PMJD.xlsx and /dev/null differ diff --git a/2017/data/raw/update/4.BacNinh_NNIS.xlsx b/2017/data/raw/update/4.BacNinh_NNIS.xlsx deleted file mode 100644 index 04de119..0000000 Binary files a/2017/data/raw/update/4.BacNinh_NNIS.xlsx and /dev/null differ diff --git a/2017/data/raw/update/4.Binh Dinh_VOMJ.xlsx b/2017/data/raw/update/4.Binh Dinh_VOMJ.xlsx deleted file mode 100644 index 704c4ae..0000000 Binary files a/2017/data/raw/update/4.Binh Dinh_VOMJ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/4.DienBien_FYGN.xlsx b/2017/data/raw/update/4.DienBien_FYGN.xlsx deleted file mode 100644 index aae73eb..0000000 Binary files a/2017/data/raw/update/4.DienBien_FYGN.xlsx and /dev/null differ diff --git a/2017/data/raw/update/4.Lang Son_QWOG.xlsx b/2017/data/raw/update/4.Lang Son_QWOG.xlsx deleted file mode 100644 index e7e9534..0000000 Binary files a/2017/data/raw/update/4.Lang Son_QWOG.xlsx and /dev/null differ diff --git a/2017/data/raw/update/5.Bac Lieu_VIVY.xlsx b/2017/data/raw/update/5.Bac Lieu_VIVY.xlsx deleted file mode 100644 index 575cac0..0000000 Binary files a/2017/data/raw/update/5.Bac Lieu_VIVY.xlsx and /dev/null differ diff --git a/2017/data/raw/update/5.Gia Lai_TAAS.xlsx b/2017/data/raw/update/5.Gia Lai_TAAS.xlsx deleted file mode 100644 index f358c30..0000000 Binary files a/2017/data/raw/update/5.Gia Lai_TAAS.xlsx and /dev/null differ diff --git a/2017/data/raw/update/5.HaiDuong_WNHD.xlsx b/2017/data/raw/update/5.HaiDuong_WNHD.xlsx deleted file mode 100644 index 7b1169f..0000000 Binary files a/2017/data/raw/update/5.HaiDuong_WNHD.xlsx and /dev/null differ diff --git a/2017/data/raw/update/5.Hanam_SDKN.xlsx b/2017/data/raw/update/5.Hanam_SDKN.xlsx deleted file mode 100644 index 5b9d113..0000000 Binary files a/2017/data/raw/update/5.Hanam_SDKN.xlsx and /dev/null differ diff --git a/2017/data/raw/update/5.Yen Bai_BSLV.xlsx b/2017/data/raw/update/5.Yen Bai_BSLV.xlsx deleted file mode 100644 index 915dc38..0000000 Binary files a/2017/data/raw/update/5.Yen Bai_BSLV.xlsx and /dev/null differ diff --git a/2017/data/raw/update/6.Hau Giang_SIAJ.xlsx b/2017/data/raw/update/6.Hau Giang_SIAJ.xlsx deleted file mode 100644 index f4a67e4..0000000 Binary files a/2017/data/raw/update/6.Hau Giang_SIAJ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/6.HoaBinh_HLYQ.xlsx b/2017/data/raw/update/6.HoaBinh_HLYQ.xlsx deleted file mode 100644 index 768a885..0000000 Binary files a/2017/data/raw/update/6.HoaBinh_HLYQ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/6.NinhBinh_PKMQ.xlsx b/2017/data/raw/update/6.NinhBinh_PKMQ.xlsx deleted file mode 100644 index 7fab324..0000000 Binary files a/2017/data/raw/update/6.NinhBinh_PKMQ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/6.Quang Ninh_YAKJ.xlsx b/2017/data/raw/update/6.Quang Ninh_YAKJ.xlsx deleted file mode 100644 index 51ddb21..0000000 Binary files a/2017/data/raw/update/6.Quang Ninh_YAKJ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/7.HaTinh_XMFQ.xlsx b/2017/data/raw/update/7.HaTinh_XMFQ.xlsx deleted file mode 100644 index 0aa1629..0000000 Binary files a/2017/data/raw/update/7.HaTinh_XMFQ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/7.HungYen_TCBE.xlsx b/2017/data/raw/update/7.HungYen_TCBE.xlsx deleted file mode 100644 index be95a39..0000000 Binary files a/2017/data/raw/update/7.HungYen_TCBE.xlsx and /dev/null differ diff --git a/2017/data/raw/update/7.Kon Tum_CAQU.xlsx b/2017/data/raw/update/7.Kon Tum_CAQU.xlsx deleted file mode 100644 index aa2d88a..0000000 Binary files a/2017/data/raw/update/7.Kon Tum_CAQU.xlsx and /dev/null differ diff --git a/2017/data/raw/update/7.Tien Giang_AOWZ.xlsx b/2017/data/raw/update/7.Tien Giang_AOWZ.xlsx deleted file mode 100644 index 43206a0..0000000 Binary files a/2017/data/raw/update/7.Tien Giang_AOWZ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/8.PhuYen_MLTQ.xlsx b/2017/data/raw/update/8.PhuYen_MLTQ.xlsx deleted file mode 100644 index 7af0186..0000000 Binary files a/2017/data/raw/update/8.PhuYen_MLTQ.xlsx and /dev/null differ diff --git a/2017/data/raw/update/9.DakNong_ZWJT.xlsx b/2017/data/raw/update/9.DakNong_ZWJT.xlsx deleted file mode 100644 index cffd8a6..0000000 Binary files a/2017/data/raw/update/9.DakNong_ZWJT.xlsx and /dev/null differ diff --git a/2017/data/raw/update/9.Khanh Hoa_IBTX.xlsx b/2017/data/raw/update/9.Khanh Hoa_IBTX.xlsx deleted file mode 100644 index 058419d..0000000 Binary files a/2017/data/raw/update/9.Khanh Hoa_IBTX.xlsx and /dev/null differ diff --git a/2017/data/raw/update/9.Vinh Long_WVKI.xlsx b/2017/data/raw/update/9.Vinh Long_WVKI.xlsx deleted file mode 100644 index febfad4..0000000 Binary files a/2017/data/raw/update/9.Vinh Long_WVKI.xlsx and /dev/null differ diff --git a/2017/scripts/audit-row-counts.js b/2017/scripts/audit-row-counts.js new file mode 100644 index 0000000..f1b1291 --- /dev/null +++ b/2017/scripts/audit-row-counts.js @@ -0,0 +1,63 @@ +// Audit: compare expected unique SBDs from raw Excel files vs DB row count +import XLSX from "xlsx"; +import Database from "better-sqlite3"; +import fs from "fs"; +import path from "path"; + +const RAW_DIR = "D:/tiennm99/thptqg2017/data"; +const DB_PATH = "D:/tiennm99/thptqg2017/public/thptqg2017.db"; + +function collectFiles() { + const out = []; + for (const f of fs.readdirSync(RAW_DIR)) { + const full = path.join(RAW_DIR, f); + if (fs.statSync(full).isFile() && f.endsWith(".xlsx")) out.push(full); + } + return out; +} + +function isHeader(row) { + if (!row || row.length < 3) return false; + const first = String(row[0] || "").toUpperCase(); + return first === "HO_TEN" || first === "HỌ TÊN" || first === "STT"; +} + +const allSbd = new Set(); +let totalDataRows = 0, + emptyName = 0, + emptySbd = 0, + bothEmpty = 0; + +for (const file of collectFiles()) { + const wb = XLSX.readFile(file); + const ws = wb.Sheets[wb.SheetNames[0]]; + const rows = XLSX.utils.sheet_to_json(ws, { header: 1 }); + for (let i = 0; i < rows.length; i++) { + const r = rows[i]; + if (i === 0 && isHeader(r)) continue; + totalDataRows++; + const hoTen = String(r?.[0] || "").trim(); + const sbd = String(r?.[2] || "").trim(); + if (!hoTen && !sbd) { + bothEmpty++; + continue; + } + if (!hoTen) emptyName++; + if (!sbd) emptySbd++; + if (sbd) allSbd.add(sbd); + } +} + +const db = new Database(DB_PATH, { readonly: true }); +const dbCount = db.prepare("SELECT COUNT(*) c FROM student").get().c; + +console.log("=== Source vs DB ==="); +console.log(`Source: total data rows across all files: ${totalDataRows}`); +console.log(`Source: rows with empty name AND sbd (skipped): ${bothEmpty}`); +console.log(`Source: rows with missing name only: ${emptyName}`); +console.log(`Source: rows with missing sbd only: ${emptySbd}`); +console.log(`Source: distinct SBDs: ${allSbd.size}`); +console.log(`DB: row count: ${dbCount}`); +console.log( + `Match: ${allSbd.size === dbCount ? "YES — all unique SBDs accounted for" : "NO — gap of " + (allSbd.size - dbCount)}`, +); diff --git a/2017/scripts/build-database.js b/2017/scripts/build-database.js index bb37ddb..70c22b5 100644 --- a/2017/scripts/build-database.js +++ b/2017/scripts/build-database.js @@ -6,7 +6,7 @@ import { fileURLToPath } from "url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const RAW_DIR = path.join(__dirname, "..", "data", "raw"); +const RAW_DIR = path.join(__dirname, "..", "data"); const DB_PATH = path.join(__dirname, "..", "public", "thptqg2017.db"); // Score patterns. Note: source data uses both "X.YZ" and "X" forms; allow optional decimal. @@ -37,29 +37,15 @@ function toAscii(str) { .toLowerCase(); } -// Collect all .xlsx files: raw/ first, then raw/(update)/ to overwrite +// Collect all .xlsx files directly under data/ function collectExcelFiles() { const files = []; - - // Main raw files first for (const f of fs.readdirSync(RAW_DIR)) { const full = path.join(RAW_DIR, f); if (fs.statSync(full).isFile() && f.endsWith(".xlsx")) { files.push(full); } } - - // Update files second (will overwrite via INSERT OR REPLACE) - const updateDir = path.join(RAW_DIR, "update"); - if (fs.existsSync(updateDir)) { - for (const f of fs.readdirSync(updateDir)) { - const full = path.join(updateDir, f); - if (fs.statSync(full).isFile() && f.endsWith(".xlsx")) { - files.push(full); - } - } - } - return files; } diff --git a/2017/scripts/check-duplicates.js b/2017/scripts/check-duplicates.js index 1b5f70b..7b17e1f 100644 --- a/2017/scripts/check-duplicates.js +++ b/2017/scripts/check-duplicates.js @@ -3,10 +3,7 @@ import crypto from "crypto"; import fs from "fs"; import path from "path"; -const dirs = [ - "D:/tiennm99/thptqg2017/data/raw", - "D:/tiennm99/thptqg2017/data/raw/update", -]; +const dirs = ["D:/tiennm99/thptqg2017/data"]; const byHash = {}; for (const d of dirs) {