Initial commit: AGC Chatbot project
This commit is contained in:
commit
881dcc4986
65
.gitignore
vendored
Normal file
65
.gitignore
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
# Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
|
||||
# Virtual Environment
|
||||
venv/
|
||||
env/
|
||||
ENV/
|
||||
.venv
|
||||
|
||||
# Environment Variables (IMPORTANT - Contains API keys!)
|
||||
.env
|
||||
.env.*
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.sublime-*
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
logs/
|
||||
|
||||
# Database
|
||||
*.db
|
||||
*.sqlite*
|
||||
|
||||
# Streamlit
|
||||
.streamlit/
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
temp/
|
||||
tmp/
|
||||
|
||||
# Distribution
|
||||
build/
|
||||
dist/
|
||||
*.egg-info/
|
||||
|
||||
# Testing
|
||||
.pytest_cache/
|
||||
.coverage
|
||||
htmlcov/
|
||||
|
||||
# Documentation
|
||||
docs/_build/
|
||||
|
||||
# Jupyter
|
||||
.ipynb_checkpoints/
|
||||
|
||||
# Model files
|
||||
*.pkl
|
||||
*.pickle
|
||||
|
||||
# AGC Project Specific
|
||||
# draft/ # Uncomment if you don't want to track draft folder
|
9
Data/AKTA KANUN KESEKSAAN/LKK_INFOID.sql
Normal file
9
Data/AKTA KANUN KESEKSAAN/LKK_INFOID.sql
Normal file
File diff suppressed because one or more lines are too long
11
Data/AKTA KANUN KESEKSAAN/LT_LKK_ALLEGATION.sql
Normal file
11
Data/AKTA KANUN KESEKSAAN/LT_LKK_ALLEGATION.sql
Normal file
@ -0,0 +1,11 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_ALLEGATION
|
||||
WHERE LKK_INFOID IN (142,156,163,164,187)
|
||||
-- Date: 2025-04-18 13:43
|
||||
*/
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (294,'142','charge1','BA-45B-30-10/2018','SURESH',574,'574/KANUN KESEKSAAN','302',NULL,'<p>“Bahawa kamu pada 25hb Mei 2018 jam lebih kurang 4.00 pagi bertempat di rumah No. B-21-2A, Blok B, Pangsapuri Sri Gotong, Batu Caves, Selangor dalam daerah Gombak dalam Negeri Selangor Darul Ehsan telah melakukan bunuh dengan menyebabkan kematian Kyar Aye (No.passport MD 227481). Oleh yang demikian, kamu telah melakukan suatu kesalahan yang boleh dihukum di bawah seksyen 302 kanun keseksaan”</p>\n',NULL,'2022-11-04 10:05:08','alison.chan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (301,'156','charge1','BA-41H-120-10/2021','JOSEPH PRAKASH A/L SUGUMARAN ',574,'574/KANUN KESEKSAAN','427',NULL,'<p style=\"margin-left:48px; margin-right:29px; text-align:justify\"><em>Bahawa kamu pada 29/09/2021 jam lebih kurang 4 petang, di Luar perkarangan IPD Serdang, dalam daerah Petaling, di dalam Negeri Selangor Darul Ehsan, telah didapati melakukan khianat dengan memecahkan cermin kereta milik Mani Maran a/l Manickam kpt: 800425-08-5739 yang nilai kerugian dianggarkan RM1,000.00. Oleh yang demikian kamu telah melakukan satu kesalahan yang boleh dihukum dibawah seksyen 427 Kanun Keseksaan</em></p>\n',NULL,'2022-11-10 10:24:43','alison.chan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (340,'163','charge1','BA-42JSKS-5-10/2020','MOHD ZIQRUL FHAHMIE BIN DERAMAN',574,'574/KANUN KESEKSAAN','SEKSYEN 367(1) KANUN KESEKSAAN DAN SEKSYEN 354 KANUN KESEKSAAN',NULL,'<p><strong><u>PERTUDUHAN PERTAMA</u></strong></p>\n\n<p> </p>\n\n<p style=\"text-align:justify\">Bahawa kamu pada 15/02/2015 di antara jam lebih kurang 3.00 petang di sebuah rumah teres beralamat No. 11 Lot 1977, Jalan Tanjung, Kampung Sijangkang, Teluk Panglima Garang, dalam daerah Kuala Langat, dalam negeri Selangor, telah melakukan rogol ke atas mangsa nama : Nurfarahin binti Ahmad Mukromin kpt : 0301222-10-1334 (12 tahun 24 hari) yang mana ketika itu mangsa masih di bawah umur. Oleh yang demikian kamu telah melakukan kesalahan di bawah Seksyen 376(1) Kanun Keseksaan dan kamu bolehlah dihukum di bawah akta yang sama.</p>\n\n<p style=\"text-align:center\"> </p>\n\n<p><strong><u>PERTUDUHAN KEDUA</u></strong></p>\n\n<p> </p>\n\n<p style=\"text-align:justify\">Bahawa kamu pada 13/02/2015 di antara jam lebih kurang 6.30 hingga jam lebih kurang 6.50 petang di sebuah rumah teres beralamat No. 11 Lot 1977, Jalan Tanjung, Kampung Sijangkang, Teluk Panglima Garang, dalam daerah Kuala Langat, dalam negeri Selangor, dengan curang telah melakukan satu kesalahan mencabul kehormatan seorang mangsa nama Nurfarahin binti Ahmad Mukromin kpt: 030122-10-1334 (12 tahun 22 hari) dengan cara kamu telah meramas dan menghisap kedua-dua belah buah dada mangsa yang mana perbuatan tersebut tanpa kerelaannya. Oleh yang demikian kamu telah melakukan kesalahan di bawah Seksyen 354 Kanun Keseksaan dan kamu bolehlah dihukum di bawah akta yang sama.</p>\n\n<p style=\"text-align:center\"> </p>\n',NULL,'2022-11-14 17:51:24','aidatul',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (341,'164','charge1','BA-42H-18-04/2022','CHE ENGKU MUHAMMAD FARITH DANIEL BIN CHE ENGKU HANAFI',574,'574/KANUN KESEKSAAN','392/397',NULL,'<p><em>Bahawa kamu pada 16/4/2022 jam lebih kurang 6.00 pagi bertempat di 7-Eleven No.29, Jalan Bunga Kantan 1, Taman Bunga Kantan Kajang, Dalam Daerah Hulu Langat dalam Negeri Selangor Darul Ehsan telah didapati dengan niat melakukan rompkaan dengan bersenjatakan sebilah pisau terhadap penama Faridah binti Marzah, No.kp 830301146-82 dengan mengambil wang tunai RM20.00. Oleh yang demikian, kamu telah melakukan satu esalahan yang boleh dihukum di bawah seksyen 392 Kanun Keseksaan dan dibaca bersama seksyen 397 Kanun Keseksaan. </em></p>\n',NULL,'2022-11-16 12:29:17','alison.chan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (370,'187','charge1','BA-41H-22-04/2022','ZAINOL ABIDIN BIN MD ZAIN ',574,'574/KANUN KESEKSAAN','428',NULL,'<p style=\"margin-left:48px; text-align:justify\"><strong><u>Pertuduhan Pertama </u></strong></p>\n\n<p><em>“Bahawa kamu pada 1/7/2020, jam lebih kurang 6.40 petang, di hadapan perkarangan rumah beralamat Lot 3469, Lorong Setia 12, Kg Setia, Kuang 48050 Rawang, Selangor di dalam Daerah Gombak dalam Negeri Selangor Darul Ehsan telah didapati dengan sengaja melakukan khianat dengan membunuh seekor kucing dengan cara menembaknya menggunakan senjata milik kamu iaitu 1 laras senjata api senapang patah jenis WINCHESTER MODEL 37-STEELBILT-12 GA, No. Senjata: 24765. Oleh itu, kamu telah melakukan satu kesalahan yang boleh dihukum di bawah seksyen 428 Kanun Keseksaan. </em></p>\n',NULL,'2022-11-30 14:40:57','alison.chan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (371,'187','charge1','BA-41H-22-04/2022','ZAINOL ABIDIN BIN MD ZAIN ',206,'206/AKTA SENJATA 1960','39/43',NULL,'<p style=\"margin-left:48px; text-align:justify\"><strong><u>Pertuduhan Kedua</u></strong></p>\n\n<p style=\"margin-left:48px; text-align:justify\"> </p>\n\n<p style=\"margin-left:48px; text-align:justify\"><em>“Bahawa kamu 1/7/2020, jam lebih kurang 6.40 petang, di hadapan perkarangan rumah beralamat Lot 3469, Lorong Setia 12, Kg Setia, Kuang 48050 Rawang, Selangor di dalam Daerah Gombak dalam Negeri Selangor Darul Ehsan telah didapati melepaskan tembakan di tempat awam yang tidak dijadikan sebagai padang tembak tanpa sebarang sebab yang dibenarkan oleh undang-undang dengan menggunakan senjata milik kamu iaitu 1 laras senjata api senapang patah jenis WINCHESTER MODEL 37-STEELBILT-12 GA, No. Senjata: 24765. Oleh itu, kamu telah melakukan satu kesalahan di bawah seksyen 39 Akta Senjata 1960 (Akta 206) yang boleh dihukum di bawah seksyen 43 Akta yang sama” </em></p>\n',NULL,'2022-11-30 14:41:28','alison.chan',NULL,NULL,NULL,NULL);
|
19
Data/AKTA KANUN KESEKSAAN/LT_LKK_PERSON_INVOLVE.sql
Normal file
19
Data/AKTA KANUN KESEKSAAN/LT_LKK_PERSON_INVOLVE.sql
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
-- Query: select * from ilims_usr.LT_LKK_PERSON_INVOLVE
|
||||
WHERE LKK_INFOID IN (142,156,163,164,187)
|
||||
-- Date: 2025-04-18 13:42
|
||||
*/
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (214,'{\"peranan\": \"Hakim\", \"category\": \"corum\", \"namaPihak\": \"YA Dato\' Norsharidah bt Awang \"}',142,'2022-11-04 10:00:58','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (215,'{\"noKP\": \"tidak berkenaan\", \"negaraO\": \"-1\", \"poskodO\": \"40503\", \"category\": \"prosecutors\", \"daerahId\": \"43\", \"negeriId\": \"10\", \"daerahDesc\": \"SHAH ALAM\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"unit pendakwaan, pejabat penasihat undang-undang negeri Selangor, Bangunan SSAAS,\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"ALISON CHAN MAY KAM\", \"emailPerayuResponden\": \"alison.chan@agc.gov.my\", \"noPhonePerayuResponden\": \"016-3180951\"}',142,'2022-11-04 10:02:24','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (216,'{\"noKP\": \"tiada passport \", \"negaraO\": \"-1\", \"poskodO\": \"51200\", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"TETUAN SHEELAN ARJUNAN\", \"namaPeguamTpr\": \"Sheelan Arjunan\", \"officeAddressO\": \"D-2-23, 2ND FLOOR, BLOCK D, PUTRA MAJESTIK, JALAN KASIPILLAY, 51200 KUALA LUMPUR, \\r\\n \", \"officePhoneNoO\": \"03-40400508\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Suresh\", \"emailPerayuResponden\": \"tidak berkenaan\", \"noPhonePerayuResponden\": \"tidak berkenaan\"}',142,'2022-11-04 10:04:39','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (232,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' NORSHARIDAH BT AWANG\"}',156,'2022-11-10 10:21:26','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (233,'{\"noKP\": \"tidak berkenaan\", \"negaraO\": \"-1\", \"poskodO\": \"40503\", \"category\": \"appellant\", \"daerahId\": \"43\", \"negeriId\": \"10\", \"daerahDesc\": \"SHAH ALAM\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"ALISON CHAN MAY KAM\", \"officeAddressO\": \"UNIT PENDAKWAAN, PPUUN SELANGOR, TINGKAT 4, PODIUM UTARA, BANGUNAN SSAAS\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Perayu\", \"namaPerayuResponden\": \"PENDAKWA RAYA\", \"emailPerayuResponden\": \"alison.chan@agc.gov.my\", \"noPhonePerayuResponden\": \"0163180951\"}',156,'2022-11-10 10:22:43','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (234,'{\"noKP\": \"780718-10-5611\", \"negaraO\": \"-1\", \"poskodO\": \" 41200\", \"category\": \"respondent\", \"daerahId\": \"1001\", \"negeriId\": \"10\", \"daerahDesc\": \"Klang\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"TETUAN YAACOB MENTOL, ZAMANI & ASSOCIATES\", \"namaPeguamTpr\": \"MOHD ZAILANI BIN MELI\", \"officeAddressO\": \"NO.19-1, 1ST FLOOR, JALAN KASUARINA 2, BANDAR BOTANIC \", \"officePhoneNoO\": \"03-58887717\", \"PerayuRespondenId\": \"Responden\", \"namaPerayuResponden\": \"JOSEPH PRAKASH A/L SUGUMARAN \", \"emailPerayuResponden\": \"TIDAK BERKENAAN\", \"noPhonePerayuResponden\": \"TIDAK BERKENAAN\"}',156,'2022-11-10 10:24:10','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (251,'{\"peranan\": \"PESURUHJAYA KEHAKIMAN\", \"category\": \"corum\", \"namaPihak\": \"YANG ARIF PUAN JULIA BINTI IBRAHIM\"}',163,'2022-11-14 17:37:52','aidatul',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (252,'{\"noKP\": \"90210-03-5295\", \"negaraO\": \"MYS\", \"poskodO\": \"70000\", \"category\": \"appellant\", \"daerahId\": \"0505\", \"negeriId\": \"05\", \"daerahDesc\": \"SEREMBAN\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"NEGERI SEMBILAN\", \"guamanAgensi\": \"TETUAN HARESH MAHADEVAN & CO.\", \"namaPeguamTpr\": \"AIDATUL AZURA BINTI ZAINAL ABIDIN\", \"officeAddressO\": \"NO. 49, TINGKAT SATU, JALAN YAM TUAN\\r\\n70000 SEREMBAN\\r\\nNEGERI SEMBILAN\", \"officePhoneNoO\": \"06-7673003\", \"PerayuRespondenId\": \"Perayu\", \"namaPerayuResponden\": \"MOHD ZIQRUL FHAHMIE BIN DERAMAN \", \"emailPerayuResponden\": \"hm_ramco@yahoo.com\", \"noPhonePerayuResponden\": \"06-7673003\"}',163,'2022-11-14 17:42:01','aidatul',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (253,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' NORSHARIDAH BT AWANG\"}',164,'2022-11-16 12:26:29','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (254,'{\"noKP\": \"990824-10-6525\", \"negaraO\": \"-1\", \"poskodO\": \"TIDAK BERKENAAN\", \"category\": \"appellant\", \"daerahId\": \"-1\", \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"TIDAK BERKENAAN\", \"namaPeguamTpr\": \"TIADA PEGUAM. OKT MEWAKILI DIRI SENDIRI \", \"officeAddressO\": \"TIDAK BERKENAAN\", \"officePhoneNoO\": \"TIDAK BERKENAAN\", \"PerayuRespondenId\": \"Perayu\", \"namaPerayuResponden\": \"CHE ENGKU MUHAMMAD FARITH DANIEL BIN CHE ENGKU HANAFI \", \"emailPerayuResponden\": \"TIDAK BERKENAAN\", \"noPhonePerayuResponden\": \"TIDAK BERKENAAN\"}',164,'2022-11-16 12:27:10','alison.chan','2022-11-16 12:27:22','alison.chan');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (255,'{\"noKP\": \"tidak berkenaan\", \"negaraO\": \"-1\", \"poskodO\": \"40503\", \"category\": \"respondent\", \"daerahId\": \"43\", \"negeriId\": \"10\", \"daerahDesc\": \"SHAH ALAM\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"ALISON CHAN MAY KAM\", \"officeAddressO\": \"UNIT PENDAKWAAN, PEJABAT PENASIHAT UNDANG-UNDANG NEGERI SELANGOR, TINGKAT 4, PODIUM UTARA, BANGUNAN SULTAN SALAHUDDIN ABDUL AZIZ SHAH \", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Responden\", \"namaPerayuResponden\": \"PENDAKWA RAYA\", \"emailPerayuResponden\": \"alison.chan@agc.gov.my\", \"noPhonePerayuResponden\": \"0163180951\"}',164,'2022-11-16 12:28:37','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (322,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' NORSHARIDAH BT AWANG\"}',187,'2022-11-30 14:37:53','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (323,'{\"noKP\": \"tidak berkenaan\", \"negaraO\": \"-1\", \"poskodO\": \"40503\", \"category\": \"appellant\", \"daerahId\": \"43\", \"negeriId\": \"10\", \"daerahDesc\": \"SHAH ALAM\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"ALISON CHAN MAY KAM\", \"officeAddressO\": \"UNIT PENDAKWAAN, PEJABAT PENASIHAT UNDANG-UNDANG NEGERI SELANGOR, TINGKAT 4, PODIUM UTARA, BANGUNAN SSAAS\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Perayu\", \"namaPerayuResponden\": \"PENDAKWA RAYA\", \"emailPerayuResponden\": \"alison.chan@agc.gov.my\", \"noPhonePerayuResponden\": \"0163180951\"}',187,'2022-11-30 14:38:51','alison.chan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (324,'{\"noKP\": \"570802-01-7301\", \"negaraO\": \"-1\", \"poskodO\": \" 45300\", \"category\": \"respondent\", \"daerahId\": \"176\", \"negeriId\": \"10\", \"daerahDesc\": \"SUNGAI BESAR\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"TETUAN ZABIR IMRAN & PARTNERS \", \"namaPeguamTpr\": \"MOHD IMRAN BIN TAMRIN\", \"officeAddressO\": \"NO.1-24 & 25, TINGKAT 1, ARKED SUNGAI BESAR, JALAN MENTERI, 45300 SUNGAI BESAR, SELANGOR\\r\\n\", \"officePhoneNoO\": \"03-32242991\", \"PerayuRespondenId\": \"Responden\", \"namaPerayuResponden\": \"ZAINOL ABIDIN BIN MD ZAIN \", \"emailPerayuResponden\": \"TIDAK BERKENAAN\", \"noPhonePerayuResponden\": \"TIDAK BERKENAAN\"}',187,'2022-11-30 14:40:23','alison.chan',NULL,NULL);
|
8
Data/AKTA PENCULIKAN 1961/LKK_INFOID.sql
Normal file
8
Data/AKTA PENCULIKAN 1961/LKK_INFOID.sql
Normal file
File diff suppressed because one or more lines are too long
15
Data/AKTA PENCULIKAN 1961/LT_LKK_ALLEGATION.sql
Normal file
15
Data/AKTA PENCULIKAN 1961/LT_LKK_ALLEGATION.sql
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_ALLEGATION
|
||||
WHERE LKK_INFOID IN (51,773,1122,1804,2225)
|
||||
-- Date: 2025-04-18 13:37
|
||||
*/
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (234,'51','charge1','BA-45C-4-09/2018 & BA-45C-5-09/2018','PENDAKWA RAYA LAWAN 1. JEVAN A/L S RAMAMURTHY (NO. K/P: 750726-14-6045) 2. SURENDRAN A/L SIVASAMY (NO. K/P: 820907-14-6221) 3. MOHAN A/L SELORAJOO (NO. K/P: 840924-05-5709) 4. PIRAKHAS A/L SUBRAMANIAM (NO. K/P: 831102-10-5443) 5. MUNIANDY A/L ACHAIYAH KANNIAH (NO. K/P: 571123-10-5443) 6. UTHAYA KUMAR A/L PONNUSAMY (NO. K/P: 920405-14-5921) 7. BARIQUE (NO. PASPORT: BB0375440) 8. POONGANESWARAN A/L KUNARAJU (NO. K/P: 830215-14-5315) 9. VIJAYA LETCHUMY A/P SANNASI (NO. K/P: 820326-04-5254)',365,'365/AKTA PENCULIKAN 1961','seksyen 3(1)',NULL,'<p><strong>PERTUDUHAN ASAL (DI BAWAH SEKSYEN 3(1) AKTA CULIK 1961):</strong></p>\n\n<p> </p>\n\n<p style=\"text-align:justify\">Bahawa kamu bersama-sama pada 12 Disember 2017, jam lebih kurang 9.10 malam, di Jalan 1B/8, Bandar Baru Sungai Buloh, dalam daerah Petaling, dalam negeri Selangor Darul Ehsan, dalam mencapai niat bersama kamu, telah melarikan secara salah seorang lelaki bernama PRATAP A/L PANNDIEN (No. K/P: 830819-14-6239) bagi maksud mendapatkan wang tebusan. Oleh yang demikian kamu telah melakukan kesalahan dan boleh dihukum di bawah seksyen 3(1) Akta Culik 1961 yang dibaca bersama dengan seksyen 34 Kanun Keseksaan.</p>\n\n<p> </p>\n',NULL,'2022-09-21 08:04:15','hokwongchin',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (235,'51','charge2','BA-45C-4-09/2018 & BA-45C-5-09/2018','PENDAKWA RAYA LAWAN 1. JEVAN A/L S RAMAMURTHY (NO. K/P: 750726-14-6045) 2. SURENDRAN A/L SIVASAMY (NO. K/P: 820907-14-6221) 3. MOHAN A/L SELORAJOO (NO. K/P: 840924-05-5709) 4. PIRAKHAS A/L SUBRAMANIAM (NO. K/P: 831102-10-5443) 5. MUNIANDY A/L ACHAIYAH KANNIAH (NO. K/P: 571123-10-5443) 6. UTHAYA KUMAR A/L PONNUSAMY (NO. K/P: 920405-14-5921) 7. BARIQUE (NO. PASPORT: BB0375440) 8. POONGANESWARAN A/L KUNARAJU (NO. K/P: 830215-14-5315) 9. VIJAYA LETCHUMY A/P SANNASI (NO. K/P: 820326-04-5254)',574,'574/KANUN KESEKSAAN','seksyen 365',NULL,'<p style=\"text-align:justify\"><strong><u>PERTUDUHAN PILIHAN </u></strong></p>\n\n<p style=\"text-align:justify\">Bahawa kamu bersama-sama dengan tertuduh yang lain pada 12 Disember 2017, jam lebih kurang 9.10 malam, di Jalan 1B/8, Bandar Baru Sungai Buloh, dalam daerah Petaling, dalam negeri Selangor Darul Ehsan, telah menculik dan melarikan secara salah seorang lelaki bernama PRATAP A/L PANNDIEN (No. K/P: 830819-14-6239) dengan niat hendak mengurungnya dengan sulit. Oleh yang demikian, kamu telah melakukan kesalahan yang boleh dihukum di bawah seksyen 365 Kanun Keseksaan dibaca dengan seksyen 34 Kanun Keseksaan.</p>\n','Pilihan','2022-09-21 08:05:57','hokwongchin',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (881,'773','charge1','BA-45C-4-09/2018 ','JEVAN A/L S RAMAMURTHY',365,'365/AKTA PENCULIKAN 1961','3',NULL,'<p style=\"text-align:justify\"><em>“Bahawa kamu bersama-sama pada 12/12/2017 jam lebih kurang 9.10 malam, bertempat di Jalan 1B/8, Bandar Baru Sungai Buloh, di dalam daerah Petaling, di dalam Negeri Selangor, dengan niat bersama telah melarikan secara salah seorang lelaki berbama Pratap a/l Pandien [No KPT: 830819-14-6239] bagi maksud mendapatkan wang tebusan sebanyak RM300,000. Oleh yang demikian kamu telah melakukan satu kesalahan yang boleh dihukum di bawah seksyen 3(1) Akta Penculikan 1961 dan dibaca bersama seksyen 34 Kanun Keseksaan.</em></p>\n',NULL,'2023-09-27 18:24:22','shahrul.ekhsan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (882,'773','charge1','BA-45C-5-09/2018','SURENDRAN A/L SIVASAMY',365,'365/AKTA PENCULIKAN 1961','3',NULL,'<p style=\"text-align:justify\"><em>“Bahawa kamu bersama-sama pada 12/12/2017 jam lebih kurang 9.10 malam, bertempat di Jalan 1B/8, Bandar Baru Sungai Buloh, di dalam daerah Petaling, di dalam Negeri Selangor, dengan niat bersama telah melarikan secara salah seorang lelaki berbama Pratap a/l Pandien [No KPT: 830819-14-6239] bagi maksud mendapatkan wang tebusan sebanyak RM300,000. Oleh yang demikian kamu telah melakukan satu kesalahan yang boleh dihukum di bawah seksyen 3(1) Akta Penculikan 1961 dan dibaca bersama seksyen 34 Kanun Keseksaan.</em></p>\n',NULL,'2023-09-27 18:25:03','shahrul.ekhsan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (883,'773','charge1','BA-45-19-06/2019','VIJAYA LETCHUMI A/P SANNASI',365,'365/AKTA PENCULIKAN 1961','5',NULL,'<p style=\"text-align:justify\"><em>“Bahawa kamu bersama-sama pada 23/1/2018 jam lebih kurang 3.00 pagi, bertempat di No.22, Jalan PU ½, Taman Puchong Utama, Puchong, di dalam daerah Petaling, di dalam Negeri Selangor, telah didapati menerima dan ada dalam milikan kamu wang tebusan sebanyak RM9,800 hasil jenayah culik bersabit Sg Buloh/12038/17. Oleh yang demikian kamu telah melakukan satu kesalahan yang boleh dihukum di bawah seksyen 5(1) Akta Penculikan 1961.</em></p>\n',NULL,'2023-09-27 18:25:58','shahrul.ekhsan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (1184,'1122','charge1','WA-45C-1-06/2023','EDY KO\'IM BIN SAID & 10 LG ',365,'365/AKTA PENCULIKAN 1961','SEKSYEN 3 AKTA 365',NULL,'<p> </p>\n\n<p style=\"text-align:justify\"><strong><em><span style=\"color:black\">"Bahawa kamu dengan secara niat bersama pada 28 September 2022 jam lebih kurang 10.40 malam, di Jalan Mayang dalam Daerah Dang Wangi, dalam Wilayah Persekutuan Kuala Lumpur, telah menahan Omar Z. M. Albelbaisy Raeda, No.Pasport: 4988330 dengan tidak berpatutan untuk mendapat ganjaran yang berupa rahsia maklumat membuat dan menyahaktif perisian komputer yang digunakan untuk menggodam telefon bimbit dan dengan ini kamu telah melakukan satu kesalahan yang boleh dihukum di bawah seksyen 3 Akta Penculikan 1961 [Akta 365] dan dibaca bersama-sama seksyen 34 Kanun Keseksaan.”</span></em></strong></p>\n\n<p>Hukuman: </p>\n\n<p><strong><em><span style=\"color:black\">“Jika disabitkan kesalahan hendaklah dijatukan hukuman penjara tidak kurang dari tiga puluh tahun tetapi tidak melebihi empat puluh tahun dan dengan sebatan."</span></em></strong></p>\n',NULL,'2023-12-06 15:33:09','nur.aqilah','2023-12-06 15:40:01','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (1185,'1122','charge1','WA-45C-2-06/2023','PENDAKWA RAYA v MOHD ZAIDI BIN MOHD ZAIN & TENGKU HAZRUL ISMAIL BIN TENGKU HAMID',365,'365/AKTA PENCULIKAN 1961','SEKSYEN 3 ',NULL,'<p style=\"margin-left:33px; text-align:justify\"><strong>“Bahawa kamu dengan secara niat bersama pada 28 September 2022 jam lebih kurang 10.40 malam, di Jalan Mayang dalam Daerah Dang Wangi, dalam Wilayah Persekutuan Kuala Lumpur, telah menahan Omar Z. M. Albelbaisy Raeda, No.Pasport: 4988330 dengan tidak berpatutan untuk mendapat ganjaran yang berupa rahsia maklumat membuat dan menyahaktif perisian komputer yang digunakan untuk menggodam telefon bimbit dan dengan ini kamu telah melakukan satu kesalahan yang boleh dihukum di bawah seksyen 3 Akta Penculikan 1961 [<em>Akta 365</em>] dan dibaca bersama-sama seksyen 34 Kanun Keseksaan.</strong></p>\n\n<p style=\"margin-left:33px; text-align:justify\">Hukuman: </p>\n\n<p style=\"margin-left:33px; text-align:justify\"><strong><em><span style=\"color:black\">“Jika disabitkan kesalahan hendaklah dijatukan hukuman penjara tidak kurang dari tiga puluh tahun tetapi tidak melebihi empat puluh tahun dan dengan sebatan."</span></em></strong></p>\n',NULL,'2023-12-06 15:38:24','nur.aqilah','2023-12-06 17:06:28','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (4147,'1804','charge1','PB-45C-1-06/2022','SASIKUMAR A/L LINGAM',365,'365/AKTA PENCULIKAN 1961','SEKSYEN 3',NULL,'<p>BAHAWA KAMU BERSAMA-SAMA EMPAT ORANG YANG MASIH BEBAS PADA 22 APRIL 2016 JAM EBIH KURANG 10.00 MALAM DI ICON CITY JALAN PENGKALAN BUKIT TENGAH BERDEKATAN STARBUCKS, DI DALAM DAERAH SEBERANG PERAI TENGAH, DI DALAM NEGERI PULAU PINANG, DALAM MENCAPAI NIAT BERSAMA KAMU, TELAH DIDAPATI MENCULIK DENGAN NIAT UNTUK MENAHAN SAHIDUL HAQUE NO PASSPORT:AG5465688 WARGANEGARA BANGLADESH, BAGI MEDAPATKAN WANG TEBUSAN SEBANYAK RM30,000.00. OLEH YANG DEMIKIAN, KAMU TELAH BERSAMA-SAMA MELAKUKAN SUATY KESALAHAN YANG BOLEH DIHUKUM DI BAWAH SEKSYEN 3(1) AKTA CULIK 1961 DAN DIBACA BERSAMA SEKSYEN 34 KANUN KESEKSAAN.</p>\n',NULL,'2024-04-23 09:56:37','nurfazliyana',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (5610,'2225','charge2','KA-44-11-06/2024','MOHD SIKRI BIN DERIS',365,'365/AKTA PENCULIKAN 1961','seksyen 3 (1) Akta Penculikan 1961.',NULL,'<p>PERMOHONAN JAMINAN DIBAWAH SEKSYEN 388 KTJ. PEMOHON DITUDUH DENGAN KESALAHAN DIBAWAH AKTA PENCULIKAN 1961</p>\n\n<p> </p>\n\n<table border=\"1\" cellspacing=\"0\" class=\"Table\" style=\"border-collapse:collapse; border:solid black 1.0pt; margin-left:7px; width:641px\">\n <tbody>\n <tr>\n <td style=\"border-color:black; height:62.1pt; vertical-align:top; width:480.75pt\">\n <p style=\"margin-left:7px\"><strong>PERTUDUHAN <s>PINDAAN</s>/ALTERNATIF (JIKA ADA):</strong></p>\n\n <p style=\"margin-left:7px\"> </p>\n\n <p style=\"text-align:justify\">Bahawa kamu pada 30 November 2020, jam antara 2.00 petang hingga 3.00 petang, di Kampung Lubok Gajah Mukim Gelong 06000 Jitra, dalam daerah Kubang Pasu, di dalam negeri Kedah, bersama-sama dengan Mohad Zaizie bin Che Sulaiman (No. KP: 850801-03-6259), Muhammad Afifi bin Ishak (No. KP: 960627-03-5871), Nasri bin Muhammad (No. KP: 620411-03-5433) serta Ahmad Nuruddin bin Hashim (No. KP: 950428-03-5933) yang telah meninggal dunia, telah bersubahat dengan mengarahkan Mohad Zaizie bin Che Sulaiman (No. KP: 850801-03-6259), Muhammad Afifi bin Ishak (No. KP: 960627-03-5871), Nasri bin Muhammad (No. KP: 620411-03-5433) serta Ahmad Nuruddin bin Hashim (No. KP: 950428-03-5933) yang telah meninggal dunia, melakukan culik ke atas Abdul Mudtalib bin Ismail (No. KP: 600703-02-5909) dan Wan Nadia Nabila binti Wan Ismail (No. KP: 910213-03-5956), di mana kesalahan tersebut telah dilakukan hasil daripada persubahatan kamu, dan dengan itu kamu telah melakukan suatu kesalahan yang boleh dihukum di bawah seksyen 109 Kanun Keseksaan dibaca bersama seksyen 3(1) Akta Culik 1961.</p>\n\n <p style=\"margin-left:7px; text-align:justify\"> </p>\n </td>\n </tr>\n </tbody>\n</table>\n','Pindaan','2024-07-09 10:19:24','fatin.farahiyah','2024-07-09 10:21:56','fatin.farahiyah','<p>TIADA KAITAN</p>\n','PPN');
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (5611,'2225','charge1','KA-44-11-06/2024','MOHD SIKRI BIN DERIS',365,'365/AKTA PENCULIKAN 1961','seksyen 3 (1) Akta Penculikan 1961.',NULL,'<p>PERMOHONAN JAMINAN DIBAWAH SEKSYEN 388 KTJ. PEMOHON DITUDUH DENGAN KESALAHAN DIBAWAH AKTA PENCULIKAN 1961</p>\n\n<p>Bahawa kamu pada 30 November 2020, jam antara 2.00 petang hingga 3.00 petang, di Kampung Lubok Gajah Mukim Gelong 0600 Jitra, dalam daerah Kubang Pasu, di dalam negeri Kedah, bersama-sama dengan Mohd Zaizie bin Che Sulaiman (No. KP: 850801-03-6259), Muhammad Afifi bin Ishak (No. K/P: 960627-03-5871), Ahmad Nuruddin bin Hashim (No. K/P: 950428-03-5933) dan Nasri bin Muhammad (No. K/P: 620411-03-5433) telah bersubahat melakukan culik ke atas Abdul Mudtalib bin Ismail (No. KP: 600703-02-5909) dan Wan Nadia Nabila binti Wan Ismail (No. KP: 910213-03-5956), di mana kesalahan tersebut telah dilakukan hasil daripada persubahatan kamu, dan dengan itu kamu telah melakukan suatu kesalahan yang boleh dihukum di bawah seksyen 109 Kanun Keseksaan dibaca bersama seksyen 3 (1) Akta Culik 1961.</p>\n',NULL,'2024-07-09 10:20:58','fatin.farahiyah','2024-07-09 10:22:23','fatin.farahiyah',NULL,NULL);
|
31
Data/AKTA PENCULIKAN 1961/LT_LKK_PERSON_INVOLVE.sql
Normal file
31
Data/AKTA PENCULIKAN 1961/LT_LKK_PERSON_INVOLVE.sql
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
-- Query: select * from ilims_usr.LT_LKK_PERSON_INVOLVE
|
||||
WHERE LKK_INFOID IN (51,773,1122,1804,2225)
|
||||
-- Date: 2025-04-18 13:37
|
||||
*/
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (73,'{\"peranan\": \"Hakim\", \"category\": \"corum\", \"namaPihak\": \"Y.A. PUAN NURULHUDA NUR’AINI BINTI MOHAMAD NOR\"}',51,'2022-09-21 08:00:12','hokwongchin',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (74,'{\"noKP\": \"Tidak berkenaan\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"PEGUAMBELA OKT 3: TETUAN GEETHAN RAM (DATO’ GEETHAN RAM) Peguambela & Peguamcara Suite No. 5, L15-05, PJX Tower No. 16ª, persiran Barat 46050 Petaling Jaya, Selangor. PEGUAMBELA OKT 4 & OKT 8 : TETUAN V. SAMY & CO (ENCIK AYASAMY VELU) Peguambela & Peguamcara NO. 22, Jalan Bagor, Taman Petaling, 41200 Klang, Selangor PEGUAMBELA OKT 6: TETUAN WONG & KIU (ENCIK K. MURALI) Peguambela & Peguamcara NO. D-05-04, Pusat komersial Southgate No. 2, Jalan Dua, Off Jalan Chan Sow Lin, Kuala Lumpur PEGUAMBELA OKT 7: TETUAN STANLEY AUGUSTIN & CO. (ENCIK STANLEY AUGUSTIN) Peguambela & Peguamcara NO. 230, 1st Floor, Jalan Ipoh, Batu 2, 51200 Kuala Lumpur\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"Ho Kwong Chin\", \"emailPerayuResponden\": \"hokwongchin@agc.gov.my\", \"noPhonePerayuResponden\": \"0123831538\"}',51,'2022-09-21 08:01:31','hokwongchin',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (1506,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA PUAN NURULHUDA NUR’AINI BINTI MOHAMAD NOR\"}',773,'2023-09-27 18:19:49','shahrul.ekhsan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (1507,'{\"noKP\": \"750726-14-6045\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"EN MAHENDRAN NAIDU.R\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"JEVAN A/L S RAMAMURTHY\", \"emailPerayuResponden\": \"NA\", \"noPhonePerayuResponden\": \"NA\"}',773,'2023-09-27 18:20:53','shahrul.ekhsan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (1508,'{\"noKP\": \"820907-14-6221\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"EN GABRIEL SUSAYAN\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"SURENDRAN A/L SIVASAMY \", \"emailPerayuResponden\": \"NA\", \"noPhonePerayuResponden\": \"NA\"}',773,'2023-09-27 18:21:44','shahrul.ekhsan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (1509,'{\"noKP\": \" 820326-04-5254\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"EN MAHENDRAN NAIDU.R\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"VIJAYA LETCHUMI A/P SANNASI \", \"emailPerayuResponden\": \"NA\", \"noPhonePerayuResponden\": \"NA\"}',773,'2023-09-27 18:22:30','shahrul.ekhsan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2212,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA TUAN MUNIANDY A/L KANNYAPPAN \"}',1122,'2023-12-06 15:23:34','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2215,'{\"noKP\": \"820320-14-5369\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"EDY KO\' IM BIN SAID \", \"emailPerayuResponden\": \"sidhupartners@gmail.com\", \"noPhonePerayuResponden\": \"013-9610503\"}',1122,'2023-12-06 16:34:46','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2216,'{\"noKP\": \"810624-13-5101\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"MOHAMAD NORAKMAL BIN HASSAN \", \"emailPerayuResponden\": \"info@tinaong.law\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:37:49','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2217,'{\"noKP\": \"E 0344453\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"DODY JUNAIDI \", \"emailPerayuResponden\": \"info@tinaong.law\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:39:41','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2218,'{\"noKP\": \"830329-10-6015\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"TENGKU ARIF BONGSU BIN TENGKU HAMID \", \"emailPerayuResponden\": \"info@tinaong.law\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:41:43','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2219,'{\"noKP\": \"830724-14-5751\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Mohamad Naziree Bin Mustapha\", \"emailPerayuResponden\": \"kimlian@yahoo.com\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:44:21','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2220,'{\"noKP\": \"821125-04-5455\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Faizull Hardey Bin Mohd Isa\", \"emailPerayuResponden\": \"gkimlian@yahoo.com\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:46:53','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2221,'{\"noKP\": \"970510-10-5767\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA\", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Muhammad Iqmal Bin Abdul Rahis\", \"emailPerayuResponden\": \"gkimlian@yahoo.com\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:48:30','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2222,'{\"noKP\": \"991111-08-5829\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Mohamad Sufian Bin Saly\", \"emailPerayuResponden\": \"gkimlian@yahoo.com\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 16:50:29','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2223,'{\"noKP\": \"010530-14-141425\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Muhammad Al Hatim Bin Mohd Fauzi\", \"emailPerayuResponden\": \"amzaharilco@gmail.com\", \"noPhonePerayuResponden\": \"012-2342256\"}',1122,'2023-12-06 16:53:16','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2224,'{\"noKP\": \"880615-56-5672\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA\", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Nidarahayu Binti Zainal\", \"emailPerayuResponden\": \"airinfo.legal@gmail.com\", \"noPhonePerayuResponden\": \"03-67320640\"}',1122,'2023-12-06 16:56:28','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2225,'{\"noKP\": \"830624-14-5543\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Raibafie Bin Amdan\", \"emailPerayuResponden\": \"jagjitariff@gmail.com\", \"noPhonePerayuResponden\": \"03-64135823\"}',1122,'2023-12-06 16:59:10','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2226,'{\"noKP\": \"680928-08-5657\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA\", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Mohd Zaidi Bin Mohd Zain\", \"emailPerayuResponden\": \"gkimlian@yahoo.com\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 17:01:11','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2227,'{\"noKP\": \"730121-14-5025\", \"negaraO\": \"MYS\", \"poskodO\": \"59100 \", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA , CAWANGAN WP KUALA LUMPUR\", \"namaPeguamTpr\": \"NUR AQILAH BINTI ISHAK \", \"officeAddressO\": \"WISMA CHASE PERDANA \", \"officePhoneNoO\": \"+60123908542\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Tengku Hazarul Ismail Bin T Hamid\", \"emailPerayuResponden\": \"gkimlian@yahoo.com\", \"noPhonePerayuResponden\": \"03-64135850\"}',1122,'2023-12-06 17:03:06','nur.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (3636,'{\"peranan\": \"Pesuruhjaya Kehakiman\", \"category\": \"corum\", \"namaPihak\": \"YA PUAN FATHIYAH BINTI IDRIS\"}',1804,'2024-04-23 09:32:02','nurfazliyana',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (3637,'{\"noKP\": \"TIDAK BERKAITAN\", \"negaraO\": \"MYS\", \"poskodO\": \"12000\", \"category\": \"prosecutors\", \"daerahId\": \"0702\", \"negeriId\": \"07\", \"daerahDesc\": \"SEBERANG PERAI UTARA\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"PULAU PINANG\", \"guamanAgensi\": \"JABATAN PEGUAM NEGARA\", \"namaPeguamTpr\": \"NUR FAZLIYANA BINTI AHMAD\", \"officeAddressO\": \"LOT G-01 WISMA PANTAI, JALAN WISMA PANTAI, KAMPUNG GAJAH\", \"officePhoneNoO\": \"TIDAK BERKAITAN\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"TIDAK BERKAITAN\", \"emailPerayuResponden\": \"TIDAK BERKAITAN\", \"noPhonePerayuResponden\": \"TIDAK BERKAITAN\"}',1804,'2024-04-23 09:34:50','nurfazliyana',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (3638,'{\"noKP\": \"931125-08-6457\", \"negaraO\": \"MYS\", \"poskodO\": \"10200\", \"category\": \"accused\", \"daerahId\": \"0704\", \"negeriId\": \"07\", \"daerahDesc\": \"TIMUR LAUT\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"PULAU PINANG\", \"guamanAgensi\": \"R DEV CHANDER & CO\", \"namaPeguamTpr\": \"MR R. DEV CHANDER\", \"officeAddressO\": \"SUITE 405, TINGKAT 4 (PENTHOUSE)\\r\\nBANGUNAN TABUNG HAJI\\r\\nNO 45, JALAN GREENHALL\", \"officePhoneNoO\": \"04-2625590\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"SASIKUMAR A/L LINGAM\", \"emailPerayuResponden\": \"TIDAK BERKAITAN\", \"noPhonePerayuResponden\": \"TIDAK BERKAITAN\"}',1804,'2024-04-23 09:37:54','nurfazliyana',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (4626,'{\"peranan\": \"Hakim Mahkamah Tinggi\", \"category\": \"corum\", \"namaPihak\": \"Yang Arif Datuk Mohamad Abazafree Mohd Abbas\"}',2225,'2024-07-09 10:05:53','fatin.farahiyah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (4627,'{\"noKP\": \"630206-03-5695\", \"negaraO\": \"MYS\", \"poskodO\": \"59100\", \"category\": \"applicant\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"Tetuan Kit & Associates\", \"namaPeguamTpr\": \"Tetuan Kit & Associates\", \"officeAddressO\": \"195-1, Sri Wangsaria, Jalan Ara, Bangsar Baru, 59100\\r\\nKuala Lumpur, Wilayah Persekutuan\\r\\n\", \"officePhoneNoO\": \"03-20930168\", \"PerayuRespondenId\": \"Pemohon\", \"namaPerayuResponden\": \"MOHD SIKRI BIN DERIS\", \"emailPerayuResponden\": \"TIADA KAITAN\", \"noPhonePerayuResponden\": \"TIADA KAITAN\"}',2225,'2024-07-09 10:10:32','fatin.farahiyah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (4628,'{\"noKP\": \"TIADA KAITAN\", \"negaraO\": \"MYS\", \"poskodO\": \"05503\", \"category\": \"prosecutors\", \"daerahId\": \"0201\", \"negeriId\": \"02\", \"daerahDesc\": \"KOTA SETAR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"KEDAH\", \"guamanAgensi\": \"PEJABAT PENASIHAT UNDANG-UNDANG NEGERI KEDAH\", \"namaPeguamTpr\": \"FATIN FARAHIYAH NADZRI\", \"officeAddressO\": \"Aras 4, Blok C, Wisma Darul Aman, Kedah, 05503 Alor Setar\", \"officePhoneNoO\": \"04-702 7424\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"TIMBALAN PENDAKWA RAYA\", \"emailPerayuResponden\": \"fatin.farahiyah@agc.gov.my\", \"noPhonePerayuResponden\": \"0195502659\"}',2225,'2024-07-09 10:13:09','fatin.farahiyah',NULL,NULL);
|
10
Data/Lain-lain/LT_LKK_ALLEGATION.sql
Normal file
10
Data/Lain-lain/LT_LKK_ALLEGATION.sql
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_ALLEGATION
|
||||
WHERE LKK_INFOID IN (17,23,41,54,133)
|
||||
-- Date: 2025-04-18 13:46
|
||||
*/
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (74,'17','charge1','BA-45A-64-9/20','ANBARASAN A/L MURUGAYAH',234,'234/AKTA DADAH BERBAHAYA 1952','seksyen 39B',NULL,'<p style=\"text-align:justify\">Bahawa kamu pada 10/10/2019, jam lebih kurang 2:30 petang, bertempat di tempat kawasan premis Restoran Azhar Maju, Jalan Dagang SB, Taman Sungai Besi, Seri Kembangan, dalam Daerah Petaling, dalam Negeri Selangor Darul Ehsan, telah mengedar dadah berbahaya iaitu Methamphetamine seberat 756.7 gram, dan dengan itu kamu telah melakukan suatu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 yang boleh dihukum di bawah seksyen 39B(2) Akta yang samaBahawa kamu pada 10/10/2019, jam lebih kurang 2:30 petang, bertempat di tempat kawasan premis Restoran Azhar Maju, Jalan Dagang SB, Taman Sungai Besi, Seri Kembangan, dalam Daerah Petaling, dalam Negeri Selangor Darul Ehsan, telah mengedar dadah berbahaya iaitu Methamphetamine seberat 756.7 gram, dan dengan itu kamu telah melakukan suatu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 yang boleh dihukum di bawah seksyen 39B(2) Akta yang sama</p>\n',NULL,'2022-09-05 10:33:28','mary.pkm',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (128,'23','charge2','BA-45A-33-03/2022','MOHAMMED FADL ELMOLA GASMEELSEED DAN 3LAGI',234,'234/AKTA DADAH BERBAHAYA 1952','6/39A(2)',NULL,'<p>Bahawa kamu bersama-sama pada 31 Mac 2021, jam lebih kurang 12.20 tengah malam, di alamat C2-07-02, Apartment Cendekiawan UNITEN, 43009 Kajang, dalam Daerah Sepang, di dalam Negeri Selangor Darul Ehsan, telah ada dalam milikan kamu dadah berbahaya iaitu Cannabis seberat 214.3 gram dan dengan itu, kamu telah melakukan satu kesalahan di bawah Seksyen 6 Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah Seksyen 39A(2) Akta yang sama dan dibaca bersama-sama Seksyen 34 Kanun Keseksaan</p>\n','Pilihan','2022-09-08 14:55:14','tengku.intan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (129,'23','charge1','BA-45A-33-03/2021','MOHAMMED FADL ELMOLA GASMELSEED KHIRALLA DAN 3 LAGI',234,'234/AKTA DADAH BERBAHAYA 1952','39B',NULL,'<p>Bahawa kamu bersama-sama pada 31 Mac 2021, jam lebih kurang 12.20 tengah malam, di alamat C2-07-02, Apartment Cendekiawan UNITEN, 43009 Kajang, dalam Daerah Sepang, di dalam Negeri Selangor Darul Ehsan, telah didapati memperedarkan dadah berbahaya iaitu Cannabis seberat 214.3 gram. Oleh yang demikian kamu telah melakukan suatu kesalahan di bawah Seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah Seksyen 39B(2) Akta yang sama dan dibaca bersama-sama Seksyen 34 Kanun Keseksaan.</p>\n',NULL,'2022-09-08 14:55:57','tengku.intan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (236,'54','charge1','BL-45A-6-03/2021',' 1. THENAGGARAO A/L THRAL RAO (NO KP: 941213-08-5955) 2. SIVANAATHIREN A/L RAJENDRAN (NO KP: 920216-10-5889) 3. GUNALAN A/L PARASURAMAN (NO KP: 941110-08-6197) 4. VASUDEVAN A/L SHANDRASEGARAN (NO.K.P.:881026-43-5305)',234,'234/AKTA DADAH BERBAHAYA 1952','39B',NULL,'<p>Bahawa kamu bersama-sama pada pada 20 Julai 2020 jam lebih kurang 8 malam di hadapan rumah No 228, Jalan Sutera, Taman Maznah dalam daerah Klang dalam negeri Selangor telah mengedar dadah berbahaya jenis Heroin dan Monoacetylmorphines seberat 35.5 gram (9.3 gram Heroin dan 26.2 gram Monoacetylmorphines) dan dengan itu kamu telah melakukan suatu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 yang boleh dihukum dibawah seksyen 39B(2) Akta yang sama dan dibaca bersama di bawah seksyen 34 Kanun Keseksaan.</p>\n',NULL,'2022-09-21 21:23:54','farah.aqilah',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (284,'133','charge1','BA-45A-23-04/2019','JOSHUA NADEN A/L SOOSAYNATHAN',234,'234/AKTA DADAH BERBAHAYA 1952','SEKSYEN 39B',NULL,'<p style=\"text-align:justify\"><em>“Bahawa kamu pada 4 September 2018 jam lebih kurang 4.00 petang bertempat di bawah Blok A, USJ One Park Riverdale USJ 1, Subang Mewah, Subang Jaya, dalam daerah Petaling, di dalam negeri Selangor Darul Ehsan, telah mengedar dadah berbahaya iaitu Cannabis seberat 687.7 gram, dan dengan itu kamu telah melakukan suatu kesalahan di bawah Seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 yang boleh dihukum di bawah Seksyen 39B(2) Akta yang sama.”</em></p>\n',NULL,'2022-10-28 16:31:06','raimi.ramli',NULL,NULL,NULL,NULL);
|
443
Data/Lain-lain/LT_LKK_INFO.sql
Normal file
443
Data/Lain-lain/LT_LKK_INFO.sql
Normal file
File diff suppressed because one or more lines are too long
21
Data/Lain-lain/LT_LKK_PERSON_INVOLVE.sql
Normal file
21
Data/Lain-lain/LT_LKK_PERSON_INVOLVE.sql
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
-- Query: select * from ilims_usr.LT_LKK_PERSON_INVOLVE
|
||||
WHERE LKK_INFOID IN (17,23,41,54,133)
|
||||
-- Date: 2025-04-18 13:46
|
||||
*/
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (8,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA Dato’ Haji Mohd Yazid bin Haji Mustafa\"}',17,'2022-09-05 10:32:03','mary.pkm',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (9,'{\"noKP\": \"911023-08-6757\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": \"\", \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Kuan Ling & C C Goh\", \"namaPeguamTpr\": \"Tong Kuan Ling & Goh Chuan Chean \", \"officeAddressO\": \"No. 7-1 (1st Floor), Jalan Puteri ¼, \\r\\nBandar Puteri, \\r\\n47100 Puchong\\r\\nSelangor Darul Ehsan\", \"officePhoneNoO\": \"0380664280\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"ANBARASAN A/L MURUGAYAH\", \"emailPerayuResponden\": \"klccgoh@gmail.com\", \"noPhonePerayuResponden\": \"0124617922\"}',17,'2022-09-05 10:37:14','mary.pkm','2022-10-05 14:14:22','mary.pkm');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (10,'{\"noKP\": \"tiada\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"Mary Phoon Keat\", \"emailPerayuResponden\": \"mary.pkm@agc.gov.my\", \"noPhonePerayuResponden\": \"0129028512\"}',17,'2022-09-05 10:37:56','mary.pkm',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (16,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' INDERA HAJI AB KARIM BIN AB RAHMAN\"}',23,'2022-09-08 14:45:55','tengku.intan','2022-09-08 14:46:35','tengku.intan');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (17,'{\"noKP\": \"tidak berkaitan\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"TENGKU INTAN SURAYA TENGKU ISMAIL\", \"emailPerayuResponden\": \"tengku.intan@agc.gov.my\", \"noPhonePerayuResponden\": \"0193019619\"}',23,'2022-09-08 14:46:26','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (18,'{\"noKP\": \"tidak berkaitan\", \"negaraO\": \"-1\", \"poskodO\": \"70300\", \"category\": \"accused\", \"daerahId\": \"0505\", \"negeriId\": \"05\", \"daerahDesc\": \"SEREMBAN\", \"negaraDesc\": \"\", \"negeriDesc\": \"NEGERI SEMBILAN\", \"guamanAgensi\": \"TETUAN ZAFLEE % CO\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"121-1, Jalan S2 B20, Pusat Dagangan, Seremban 2\", \"officePhoneNoO\": \"066011760\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"ZAFLEE BIN PAKWANTEH\", \"emailPerayuResponden\": \"zafleepakwanteh@yahoo.com\", \"noPhonePerayuResponden\": \"066011760\"}',23,'2022-09-08 14:49:50','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (45,'{\"peranan\": \"Hakim\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' INDERA HJ AB KARIM BIN AB RAHMAN\"}',41,'2022-09-14 21:46:40','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (46,'{\"noKP\": \"Tidak berkaitan\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"TENGKU INTAN SURAYA TENGKU ISMAIL\", \"emailPerayuResponden\": \"tengku.intan@agc.gov.my\", \"noPhonePerayuResponden\": \"0193019619\"}',41,'2022-09-14 21:47:55','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (47,'{\"noKP\": \"800509-05-5473\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Tetuan Law Practice of Rafique\", \"namaPeguamTpr\": \"Muhammad Rafique Bin Rashid Ali\", \"officeAddressO\": \"No. 25-3A, Jalan PJU 1/3b\\r\\nSunwaymas Commercial Centre\\r\\n47301 Petaling Jaya, Selangor\", \"officePhoneNoO\": \"03-78041216\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"YONG CHIN CAN\", \"emailPerayuResponden\": \"Tiada\", \"noPhonePerayuResponden\": \"Tiada\"}',41,'2022-09-14 21:50:59','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (75,'{\"peranan\": \"Hakim\", \"category\": \"corum\", \"namaPihak\": \"Puan Norliza binti Othman\"}',54,'2022-09-21 21:05:51','farah.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (76,'{\"noKP\": \"2.\\tSIVANAATHIREN A/L RAJENDRAN (NO KP: 920216-10-5889) 3.\\tGUNALAN A/L PARASURAMAN (NO KP: 941110-08-6197) 4.\\tVASUDEVAN A/L SHANDRASEGARAN (NO.K.P.:881026-43-5305)\", \"negaraO\": \"-1\", \"poskodO\": \"46050\", \"category\": \"accused\", \"daerahId\": \"-1\", \"negeriId\": \"10\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"Tetuan Sivananthan Advocates & Solicitors\", \"namaPeguamTpr\": \"Datuk Sivananthan & Nabila Habib\", \"officeAddressO\": \"Suite No. 1, L17-01, PJX Tower\\r\\nNo. 16A, Persiaran Barat\\r\\n46050 Petaling Jaya\\r\\nSelangor Darul Ehsan, Malaysia\", \"officePhoneNoO\": \"+60374918055\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"2.\\tSIVANAATHIREN A/L RAJENDRAN (NO KP: 920216-10-5889) 3.\\tGUNALAN A/L PARASURAMAN (NO KP: 941110-08-6197) 4.\\tVASUDEVAN A/L SHANDRASEGARAN (NO.K.P.:881026-43-5305)\", \"emailPerayuResponden\": \"info@malaysiancriminal.lawyer\", \"noPhonePerayuResponden\": \"+60374918055\"}',54,'2022-09-21 21:14:46','farah.aqilah','2022-09-21 21:22:44','farah.aqilah');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (77,'{\"noKP\": \"941213-08-5955\", \"negaraO\": \"MYS\", \"poskodO\": \"51200\", \"category\": \"accused\", \"daerahId\": \"189\", \"negeriId\": \"14\", \"daerahDesc\": \"BANDAR KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"Tetuan Selvam Shanmugam & Partners\", \"namaPeguamTpr\": \"Tuan S. Selvam\", \"officeAddressO\": \"No. 10-9, Office Suite, Mutiara Complex 3 1/2 Miles, Jalan Ipoh, 51200 Kuala Lumpur\", \"officePhoneNoO\": \"0198612251\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"1.\\tTHENAGGARAO A/L THRAL RAO \", \"emailPerayuResponden\": \"selvamshanmugam.office@gmail.com\", \"noPhonePerayuResponden\": \"0198612251\"}',54,'2022-09-21 21:22:22','farah.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (78,'{\"peranan\": \"Timbalan Pendakwa Raya\", \"category\": \"corum\", \"namaPihak\": \"Farah Aqilah Ahmad Fuad\"}',54,'2022-09-21 21:43:29','farah.aqilah',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (190,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"JULIA BINTI IBRAHIM\"}',133,'2022-10-28 16:25:06','raimi.ramli',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (191,'{\"noKP\": \"tiada berkenaan\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"MOHD RAIMI BIN MOHD RAMLI\", \"emailPerayuResponden\": \"raimi.ramli@agc.gov.my\", \"noPhonePerayuResponden\": \"0126752990\"}',133,'2022-10-28 16:26:16','raimi.ramli',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (192,'{\"noKP\": \"TIADA BERKENAAN\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": \"-1\", \"negeriId\": \"14\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"TETUAN VIJAY & CO\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"UNIT3.02D (EAST WING) LEVEL 3,\\r\\nMENARA BRDB BANGSAR, 285, JALAN MAAROF,\\r\\nBUKIT BANDARAYA, \\r\\nKUALA LUMPUR\\r\\n\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"JOSHUA NADEN A/L SOOSAYNATHAN\", \"emailPerayuResponden\": \"TIADA BERKENAAN\", \"noPhonePerayuResponden\": \"TIADA BERKENAAN\"}',133,'2022-10-28 16:29:36','raimi.ramli',NULL,NULL);
|
13
Data/Seksyen 39B/LT_LKK_ALLEGATION.sql
Normal file
13
Data/Seksyen 39B/LT_LKK_ALLEGATION.sql
Normal file
@ -0,0 +1,13 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_ALLEGATION
|
||||
WHERE LKK_INFOID IN (8,17,23,31,43)
|
||||
-- Date: 2025-04-18 13:35
|
||||
*/
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (69,'8','charge1','BA-45A-31-06/2020, BA-45-21-06/2020 & BA-45-29-09/2020','WAN MOHD HERDY BIN WAN HAMID',234,'234/AKTA DADAH BERBAHAYA 1952','39B',NULL,'<p style=\"margin-left:54px; margin-right:5px; text-align:justify\">',NULL,'2022-09-01 16:13:21','siti.suriatey',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (70,'8','charge1','BA-45A-31-06/2020, BA-45-21-06/2020 & BA-45-29-09/2020','WAN MOHD HERDY BIN WAN HAMID',234,'234/AKTA DADAH BERBAHAYA 1952','12(2)',NULL,'<p style=\"margin-left:54px; margin-right:5px; text-align:justify\">',NULL,'2022-09-01 16:14:16','siti.suriatey',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (71,'8','charge1','BA-45A-31-06/2020, BA-45-21-06/2020 & BA-45-29-09/2020','WAN MOHD HERDY BIN WAN HAMID',366,'366/AKTA RACUN 1952','30(3)',NULL,'<p style=\"margin-left:54px; margin-right:5px; text-align:justify\">',NULL,'2022-09-01 16:15:04','siti.suriatey',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (74,'17','charge1','BA-45A-64-9/20','ANBARASAN A/L MURUGAYAH',234,'234/AKTA DADAH BERBAHAYA 1952','seksyen 39B',NULL,'<p style=\"text-align:justify\">Bahawa kamu pada 10/10/2019, jam lebih kurang 2:30 petang, bertempat di tempat kawasan premis Restoran Azhar Maju, Jalan Dagang SB, Taman Sungai Besi, Seri Kembangan, dalam Daerah Petaling, dalam Negeri Selangor Darul Ehsan, telah mengedar dadah berbahaya iaitu Methamphetamine seberat 756.7 gram, dan dengan itu kamu telah melakukan suatu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 yang boleh dihukum di bawah seksyen 39B(2) Akta yang samaBahawa kamu pada 10/10/2019, jam lebih kurang 2:30 petang, bertempat di tempat kawasan premis Restoran Azhar Maju, Jalan Dagang SB, Taman Sungai Besi, Seri Kembangan, dalam Daerah Petaling, dalam Negeri Selangor Darul Ehsan, telah mengedar dadah berbahaya iaitu Methamphetamine seberat 756.7 gram, dan dengan itu kamu telah melakukan suatu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 yang boleh dihukum di bawah seksyen 39B(2) Akta yang sama</p>\n',NULL,'2022-09-05 10:33:28','mary.pkm',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (128,'23','charge2','BA-45A-33-03/2022','MOHAMMED FADL ELMOLA GASMEELSEED DAN 3LAGI',234,'234/AKTA DADAH BERBAHAYA 1952','6/39A(2)',NULL,'<p>Bahawa kamu bersama-sama pada 31 Mac 2021, jam lebih kurang 12.20 tengah malam, di alamat C2-07-02, Apartment Cendekiawan UNITEN, 43009 Kajang, dalam Daerah Sepang, di dalam Negeri Selangor Darul Ehsan, telah ada dalam milikan kamu dadah berbahaya iaitu Cannabis seberat 214.3 gram dan dengan itu, kamu telah melakukan satu kesalahan di bawah Seksyen 6 Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah Seksyen 39A(2) Akta yang sama dan dibaca bersama-sama Seksyen 34 Kanun Keseksaan</p>\n','Pilihan','2022-09-08 14:55:14','tengku.intan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (129,'23','charge1','BA-45A-33-03/2021','MOHAMMED FADL ELMOLA GASMELSEED KHIRALLA DAN 3 LAGI',234,'234/AKTA DADAH BERBAHAYA 1952','39B',NULL,'<p>Bahawa kamu bersama-sama pada 31 Mac 2021, jam lebih kurang 12.20 tengah malam, di alamat C2-07-02, Apartment Cendekiawan UNITEN, 43009 Kajang, dalam Daerah Sepang, di dalam Negeri Selangor Darul Ehsan, telah didapati memperedarkan dadah berbahaya iaitu Cannabis seberat 214.3 gram. Oleh yang demikian kamu telah melakukan suatu kesalahan di bawah Seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah Seksyen 39B(2) Akta yang sama dan dibaca bersama-sama Seksyen 34 Kanun Keseksaan.</p>\n',NULL,'2022-09-08 14:55:57','tengku.intan',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (192,'31','charge1','BA-45A-32-03/2021','VIKNES WAREN A/L S.SELVAM RAJ ',234,'234/AKTA DADAH BERBAHAYA 1952','39B',NULL,'<p>Tertuduh telah dituduh di dalam kes BA-45A-32-03/2021 dengan pertuduhan pindaan ('eksibit P2') seperti berikut:-</p>\n\n<p>" Bahawa kamu pada 4.5.2020 jam lebih kurang 5.45 petang bertempat di Tempat Letak Kereta, Jalan Mahkota Residence 2, Bandar Mahkota Cheras, di dalam Daerah Hulu Langat, di dalam Negeri Selangor Darul Ehsan telah mengedar dadah berbahaya jenis METHAPHETAMINE dengan berat bersih 767.2 gram. Oleh yang demikian kamu telah melakukan suatu kesalahan di bawah Seksyen 39B(1)(a) Akta Dadah berbahaya 1952 yang boleh dihukum di bawah Seksyen 39B(2) Akta yang sama.</p>\n\n<p>Hukuman:Gantung sampai mati"</p>\n',NULL,'2022-09-11 20:56:53','siti.suriatey','2022-09-11 21:21:22','siti.suriatey',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (224,'43','charge1','BA-45A-58-08/2020','PENDAKWA RAYA V YONG CHIN CAN & 3LG',234,'234/AKTA DADAH BERBAHAYA 1952','39B',NULL,'<p style=\"text-align:justify\">“Bahawa kamu bersama-sama pada 12.10.2020, jam lebih kurang 8.45 malam, bertempat di tempat letak kereta berhadapan 1977 New Ipoh Chicken Rice, Jalan Gasing 10/1 Petaling Jaya, di dalam Daerah Petaling Jaya, di Negeri Selangor Darul Ehsan, telah didapati bersama-sama mengedar dadah berbahaya jenis Methamphetamine seberat 29997.9 gram. Oleh yang demikian kamu telah melakukan suatu kesalahan di bawah Seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah Seksyen 39B(2) Akta yang sama dan dibaca bersama-sama Seksyen 34 Kanun Keseksaan.”</p>\n',NULL,'2022-09-14 22:34:44','tengku.intan',NULL,NULL,NULL,NULL);
|
553
Data/Seksyen 39B/LT_LKK_INFO.sql
Normal file
553
Data/Seksyen 39B/LT_LKK_INFO.sql
Normal file
File diff suppressed because one or more lines are too long
21
Data/Seksyen 39B/LT_LKK_PERSON_INVOLVE.sql
Normal file
21
Data/Seksyen 39B/LT_LKK_PERSON_INVOLVE.sql
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
-- Query: select * from ilims_usr.LT_LKK_PERSON_INVOLVE
|
||||
WHERE LKK_INFOID IN (8,17,23,31,43)
|
||||
-- Date: 2025-04-18 13:34
|
||||
*/
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (1,'{\"peranan\": \"HAKIM MAHKAMAH TINGGI\", \"category\": \"corum\", \"namaPihak\": \"YA TUAN HASBULLAH BIN ADAM \"}',8,'2022-09-01 15:18:14','','2022-09-01 15:19:17','');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (2,'{\"noKP\": \"tiada berkaitan \", \"negaraO\": \"MYS\", \"poskodO\": \"40000\", \"category\": \"prosecutors\", \"daerahId\": \"43\", \"negeriId\": \"10\", \"daerahDesc\": \"SHAH ALAM\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"SELANGOR\", \"guamanAgensi\": \"ALFRED EGIN & CO\", \"namaPeguamTpr\": \"ALFRED EGIN\", \"officeAddressO\": \" Pkns Bizpoint, No. 67B, Tingkat 2, \\r\\n Jalan Plumbum P7/P, Seksyen 7 \\r\\n 40000 Shah Alam, Selangor\\r\\n\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"NUR ZATIL HIDAYAH BINTI ALI\", \"emailPerayuResponden\": \"zatil.hidayah@agc.gov.my\", \"noPhonePerayuResponden\": \"0176294886\"}',8,'2022-09-01 15:23:06','',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (8,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA Dato’ Haji Mohd Yazid bin Haji Mustafa\"}',17,'2022-09-05 10:32:03','mary.pkm',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (9,'{\"noKP\": \"911023-08-6757\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": \"\", \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Kuan Ling & C C Goh\", \"namaPeguamTpr\": \"Tong Kuan Ling & Goh Chuan Chean \", \"officeAddressO\": \"No. 7-1 (1st Floor), Jalan Puteri ¼, \\r\\nBandar Puteri, \\r\\n47100 Puchong\\r\\nSelangor Darul Ehsan\", \"officePhoneNoO\": \"0380664280\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"ANBARASAN A/L MURUGAYAH\", \"emailPerayuResponden\": \"klccgoh@gmail.com\", \"noPhonePerayuResponden\": \"0124617922\"}',17,'2022-09-05 10:37:14','mary.pkm','2022-10-05 14:14:22','mary.pkm');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (10,'{\"noKP\": \"tiada\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"Mary Phoon Keat\", \"emailPerayuResponden\": \"mary.pkm@agc.gov.my\", \"noPhonePerayuResponden\": \"0129028512\"}',17,'2022-09-05 10:37:56','mary.pkm',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (16,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' INDERA HAJI AB KARIM BIN AB RAHMAN\"}',23,'2022-09-08 14:45:55','tengku.intan','2022-09-08 14:46:35','tengku.intan');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (17,'{\"noKP\": \"tidak berkaitan\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"TENGKU INTAN SURAYA TENGKU ISMAIL\", \"emailPerayuResponden\": \"tengku.intan@agc.gov.my\", \"noPhonePerayuResponden\": \"0193019619\"}',23,'2022-09-08 14:46:26','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (18,'{\"noKP\": \"tidak berkaitan\", \"negaraO\": \"-1\", \"poskodO\": \"70300\", \"category\": \"accused\", \"daerahId\": \"0505\", \"negeriId\": \"05\", \"daerahDesc\": \"SEREMBAN\", \"negaraDesc\": \"\", \"negeriDesc\": \"NEGERI SEMBILAN\", \"guamanAgensi\": \"TETUAN ZAFLEE % CO\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"121-1, Jalan S2 B20, Pusat Dagangan, Seremban 2\", \"officePhoneNoO\": \"066011760\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"ZAFLEE BIN PAKWANTEH\", \"emailPerayuResponden\": \"zafleepakwanteh@yahoo.com\", \"noPhonePerayuResponden\": \"066011760\"}',23,'2022-09-08 14:49:50','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (28,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"Y.A. TUAN HASBULLAH BIN ADAM\"}',31,'2022-09-11 20:55:52','siti.suriatey',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (29,'{\"noKP\": \"tiada berkaitan \", \"negaraO\": \"MYS\", \"poskodO\": \"50480\", \"category\": \"prosecutors\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"TETUAN SCEVETTI & ASSOCIATES\", \"namaPeguamTpr\": \"WAN AZWAN & EFA\", \"officeAddressO\": \"5M-2-20, Plaza Damas. 60, Jalan Sri Hartamas 1, Sri Hartamas, 50480, Kuala Lumpur.\", \"officePhoneNoO\": \"tiada maklumat \", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"NUR ZATIL HIDAYAH BINTI ALI\", \"emailPerayuResponden\": \"zatil.hidayah@agc.gov.my\", \"noPhonePerayuResponden\": \"0176294886\"}',31,'2022-09-11 21:32:10','siti.suriatey',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (48,'{\"peranan\": \"HAKIM\", \"category\": \"corum\", \"namaPihak\": \"YA DATO\' INDERA HAJI AB KARIM BIN AB RAHMAN\"}',43,'2022-09-14 22:26:31','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (49,'{\"noKP\": \"tidak berkaitan\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"prosecutors\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"\", \"namaPeguamTpr\": \"\", \"officeAddressO\": \"\", \"officePhoneNoO\": \"\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"TENGKU INTAN SURAYA TENGKU ISMAIL\", \"emailPerayuResponden\": \"tengku.intan@agc.gov.my\", \"noPhonePerayuResponden\": \"0193019619\"}',43,'2022-09-14 22:27:19','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (50,'{\"noKP\": \"800509-05-5473\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": \"-1\", \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Tetuan Law Practice of Rafique\", \"namaPeguamTpr\": \"Muhammad Rafique Bin Rashid Ali\", \"officeAddressO\": \"No. 25-3A, Jalan PJU 1/3b\\r\\nSunwaymas Commercial Centre\\r\\n47301 Petaling Jaya, Selangor\\r\\n\", \"officePhoneNoO\": \"03-78041216\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"YONG CHIN CAN\", \"emailPerayuResponden\": \"tiada\", \"noPhonePerayuResponden\": \"tiada\"}',43,'2022-09-14 22:29:13','tengku.intan','2022-09-14 22:29:36','tengku.intan');
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (51,'{\"noKP\": \"881006-03-5793\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Tetuan Wan Haron Sukri & Nordin\", \"namaPeguamTpr\": \"Dato’ Sukri bin Mohamed\", \"officeAddressO\": \"PT. 1180-1183, Jln Kebun Sultan\\r\\nBandar Kota Bharu\\r\\n15350 Kota Bharu\\r\\nKelantan\\r\\n\", \"officePhoneNoO\": \"09-7440011\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"MOHAMAD KHAIRUL HAFIZ BIN ADNAN\", \"emailPerayuResponden\": \"TIADA\", \"noPhonePerayuResponden\": \"TIADA\"}',43,'2022-09-14 22:31:32','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (52,'{\"noKP\": \"AB2216176\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Tetuan Wan Haron Sukri & Nordin\", \"namaPeguamTpr\": \"Dato’ Sukri bin Mohamed\", \"officeAddressO\": \"PT. 1180-1183, Jln Kebun Sultan\\r\\nBandar Kota Bharu\\r\\n15350 Kota Bharu\\r\\nKelantan\\r\\n\", \"officePhoneNoO\": \"09-7440011\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"MR HAKEEM SAMAE\", \"emailPerayuResponden\": \"TIADA\", \"noPhonePerayuResponden\": \"TIADA\"}',43,'2022-09-14 22:32:40','tengku.intan',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (53,'{\"noKP\": \"910531-11-5011\", \"negaraO\": \"-1\", \"poskodO\": \"\", \"category\": \"accused\", \"daerahId\": null, \"negeriId\": \"-1\", \"daerahDesc\": \"\", \"negaraDesc\": \"\", \"negeriDesc\": \"\", \"guamanAgensi\": \"Tetuan Zaleha Hayat & Co\", \"namaPeguamTpr\": \"Zaleha Sikkander Hayat\", \"officeAddressO\": \"No. F-07-03, Kompleks Permaisuri 6\\r\\nJalan Sri Permaisuri\\r\\n56000 Kuala Lumpur\\r\\n\", \"officePhoneNoO\": \"03-91746338\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"SYAMIL BIN TAUFIK @ ZAINAL ABIDIN\", \"emailPerayuResponden\": \"TIADA\", \"noPhonePerayuResponden\": \"TIADA\"}',43,'2022-09-14 22:33:50','tengku.intan',NULL,NULL);
|
10
Data/TPR Chan Lee Lee/LT_LKK_ALLEGATION.sql
Normal file
10
Data/TPR Chan Lee Lee/LT_LKK_ALLEGATION.sql
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_ALLEGATION WHERE LKK_INFOID IN (3203,3658)
|
||||
-- Date: 2025-04-18 13:18
|
||||
*/
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (6982,'3203','charge1','JA-45A-7-03/2021','Abd Aziz Bin Yahya',234,'234/AKTA DADAH BERBAHAYA 1952','Seksyen 12(2)/(3) ADB 1952',NULL,'<p><em>“Bahawa kamu pada 24/04/2020 jam lebih kurang 4.55 pagi di No. 363-B, Felda Bukit Aping Timur, 81900 Kota Tinggi di dalam daerah Kota Tinggi, dalam Negeri Johor Darul Takzim telah didapati memiliki dadah berbahaya jenis Methamphetamine seberat bersih 4.10 gram. Oleh yang demikian, kamu telah melakukan satu kesalahan di bawah seksyen 12(2) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah seksyen 12(3) Akta yang sama."</em></p>\n',NULL,'2024-12-13 14:52:18','chanlee.lee',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (6983,'3203','charge1','JA-45A-11-03/2021','Abd Aziz bin Yahya',234,'234/AKTA DADAH BERBAHAYA 1952','Seksyen 12(2)/(3) ADB 1952',NULL,'<p><em>“Bahawa kamu pada 24/04/2020 jam lebih kurang 4.55 pagi di No. 363-B, Felda Bukit Aping Timur, 81900 Kota Tinggi di dalam daerah Kota Tinggi, dalam Negeri Johor Darul Takzim telah didapati memiliki dadah berbahaya jenis Methamphetamine seberat bersih 2.58 gram. Oleh yang demikian, kamu telah melakukan satu kesalahan di bawah seksyen 12(2) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah seksyen 12(3) Akta yang sama."</em></p>\n',NULL,'2024-12-13 14:53:18','chanlee.lee',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (6985,'3203','charge1','JA-45A-9-03/2021','Abd Aziz bin Yahya dan Ramizah binti Rahmat',234,'234/AKTA DADAH BERBAHAYA 1952','Seksyen 12(2)/39A(1) ADB 1952',NULL,'<p><em>Bahawa kamu pada 24/04/2020 jam lebih kurang 4.55 pagi di No. 363-B, Felda Bukit Aping Timur, 81900 Kota Tinggi di dalam daerah Kota Tinggi, dalam Negeri Johor Darul Takzim telah didapati memiliki dadah berbahaya jenis Monoacetylmorphines seberat bersih 4.75 gram. Oleh yang demikian, kamu telah melakukan satu kesalahan di bawah seksyen 12(2) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah seksyen 39A(1) Akta yang sama dan dibaca bersama seksyen 34 Kanun Keseksaan</em></p>\n',NULL,'2024-12-13 14:55:13','chanlee.lee','2024-12-13 14:59:51','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (6986,'3203','charge1','JA-45A-10-03/2021','Abd Aziz bin Yahya dan Ramizah binti Rahmat',234,'234/AKTA DADAH BERBAHAYA 1952','Seksyen 39B(1)(a) ADB 1952 dan Seksyen 12(2)/39A(1) ADB 1952',NULL,'<p>Pertuduhan Pertama</p>\n\n<p><em>“Bahawa kamu pada 24/04/2020 jam lebih kurang 4.55 pagi di No. 363-B, Felda Bukit Aping Timur, 81900 Kota Tinggi di dalam daerah Kota Tinggi, dalam Negeri Johor Darul Takzim telah didapati mengedar dadah berbahaya jenis Methamphetamine seberat bersih 415.06 gram. Oleh yang demikian, kamu telah melakukan satu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah seksyen 39B(2) Akta yang sama dan dibaca bersama seksyen 34 Kanun Keseksaan</em></p>\n\n<p> </p>\n\n<p>Pertuduhan Kedua</p>\n\n<p><em>“Bahawa kamu pada 24/04/2020 jam lebih kurang 4.55 pagi di No. 363-B, Felda Bukit Aping Timur, 81900 Kota Tinggi di dalam daerah Kota Tinggi, dalam Negeri Johor Darul Takzim telah didapati mengedar dadah berbahaya jenis Methamphetamine seberat bersih 92.90 gram. Oleh yang demikian, kamu telah melakukan satu kesalahan di bawah seksyen 39B(1)(a) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah seksyen 39B(2) Akta yang sama dan dibaca bersama seksyen 34 Kanun Keseksaan.</em></p>\n\n<p> </p>\n\n<p>Pertuduhan Ketiga</p>\n\n<p><em>“Bahawa kamu pada 24/04/2020 jam lebih kurang 4.55 pagi di No. 363-B, Felda Bukit Aping Timur, 81900 Kota Tinggi di dalam daerah Kota Tinggi, dalam Negeri Johor Darul Takzim telah didapati memiliki dadah berbahaya jenis Heroin seberat bersih 3.23 gram. Oleh yang demikian, kamu telah melakukan satu kesalahan di bawah seksyen 12(2) Akta Dadah Berbahaya 1952 dan boleh dihukum di bawah seksyen 39A(1) Akta yang sama dan dibaca bersama seksyen 34 Kanun Keseksaan.</em></p>\n',NULL,'2024-12-13 14:58:09','chanlee.lee','2024-12-13 15:00:20','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (7535,'3658','charge1','JA-45B-10-11/2021','Chong Kim Pooi',574,'574/KANUN KESEKSAAN','302',NULL,'<p>Bahawa kamu di antara pada 27/9/2020 jam lebih kurang 11.30 malam sehingga 28/9/2020 jam lebih kurang 12.10 tengah malam bertempat di Alamat 14-19, Tower B Resident, Jalan Delima 3/1, Taman Daya, di dalam daerah Johor Bahru, di dalam Negeri Johor Darul Ta’zim kamu telah membunuh seorang lelaki Muhammad Afiq bin Aziz (No. K/P: 920818-14-5831) dan dengan itu kamu telah melakukan suatu kesalahan yang boleh dihukum di bawah seksyen 302 Kanun Keseksaan</p>\n',NULL,'2025-03-12 22:45:11','chanlee.lee',NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `LT_LKK_ALLEGATION` (`LLA_ALLEGATION_ID`,`LKK_INFOID`,`LLA_TYPE`,`LLA_CASE_NO`,`LLA_OKT_NAME`,`LLA_ACT_ID`,`LLA_ACT_DESC`,`LLA_SECTION`,`LLA_DATE`,`LLA_CHARGE_NOTES`,`LKK_CHARGE_TYPE`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`,`LLA_CHARGE_REASON`,`LLA_CHARGE_BY`) VALUES (7536,'3658','charge2','JA-45B-10-11/2021','Chong Kim Pooi',574,'574/KANUN KESEKSAAN','304(a)',NULL,'<p>Bahawa kamu di antara pada 27/9/2020 jam lebih kurang 11.30 malam sehingga 28/9/2020 jam lebih kurang 12.10 tengah malam bertempat di Alamat 14-19, Tower B Resident, Jalan Delima 3/1, Taman Daya, di dalam daerah Johor Bahru, di dalam Negeri Johor Darul Ta’zim kamu telah melakukan perbuatan yang menyebabkan kematian terhadap seorang lelaki bernama Muhammad Afiq bin Aziz (No. K/P: 920818-14-5831) dengan niat menyebabkan kecederaan tubuh badan yang mungkin menyebabkan kematiannya dan dengan itu kamu telah melakukan kesalahan mematikan orang dengan salah yang tidak terjumlah kepada kesalahan membunuh dan boleh dihukum di bawah seksyen 304(a) Kanun Keseksaan</p>\n','Pilihan','2025-03-12 22:46:24','chanlee.lee','2025-03-13 14:16:49','chanlee.lee','<p>Keterangan dan representasi OKT telah dikaji dan ditaklimatkan kepada YBrs. Puan KUJB, YBhg. Dato' TKBP 1 dan YBhg. Dato' PCN oleh Puan TPR Siti Hajar binti Mat Radzi. (Minit 28 bertarikh 19.2.2025 dirujuk)</p>\n\n<p>YBhg. Dato' PCN bersetuju agar OKT ditawarkan pertuduhan pilihan di bawah seksyen 304(a) KK dengan syarat OKT mengaku salah terhadap pertuduhan pilihan yang ditawarkan.</p>\n','YBhg. Dato\' Peguam Cara Negara');
|
6
Data/TPR Chan Lee Lee/LT_LKK_INFO.sql
Normal file
6
Data/TPR Chan Lee Lee/LT_LKK_INFO.sql
Normal file
File diff suppressed because one or more lines are too long
12
Data/TPR Chan Lee Lee/LT_LKK_PERSON_RESPONSIBLE.sql
Normal file
12
Data/TPR Chan Lee Lee/LT_LKK_PERSON_RESPONSIBLE.sql
Normal file
@ -0,0 +1,12 @@
|
||||
/*
|
||||
-- Query: select * from ilims_usr.LT_LKK_PERSON_INVOLVE
|
||||
WHERE LKK_INFOID IN (3203,3658)
|
||||
-- Date: 2025-04-18 13:15
|
||||
*/
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (6790,'{\"peranan\": \"Pesuruhjaya Kehakiman\", \"category\": \"corum\", \"namaPihak\": \"Yang Arif Puan Suriyati Hasimah binti Mohd Hashim\"}',3203,'2024-12-13 14:39:16','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (6791,'{\"noKP\": \"Tidak Berkaitan\", \"negaraO\": \"MYS\", \"poskodO\": \"79100\", \"category\": \"prosecutors\", \"daerahId\": \"0124\", \"negeriId\": \"01\", \"daerahDesc\": \"NUSA JAYA\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"JOHOR\", \"guamanAgensi\": \"Pendakwa Raya\", \"namaPeguamTpr\": \"TPR Chan Lee Lee\", \"officeAddressO\": \"Aras 2, Bangunan Dato\' Jaafar Muhamamd\", \"officePhoneNoO\": \"013-3339158\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"Pendakwa Raya\", \"emailPerayuResponden\": \"Tidak Berkaitan\", \"noPhonePerayuResponden\": \"Tidak Berkaitan\"}',3203,'2024-12-13 14:41:09','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (6792,'{\"noKP\": \"720429-01-5113\", \"negaraO\": \"MYS\", \"poskodO\": \"81200\", \"category\": \"accused\", \"daerahId\": \"0102\", \"negeriId\": \"01\", \"daerahDesc\": \"JOHOR BAHRU\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"JOHOR\", \"guamanAgensi\": \"Tetuan Shaik Adam & Co\", \"namaPeguamTpr\": \"Encik Shaik Saleem\", \"officeAddressO\": \"No-20-01, Jalan Cenderasari 3, Taman Perbadanan Islam Larkin\", \"officePhoneNoO\": \"019-7707270\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Abd Aziz bin Yahya\", \"emailPerayuResponden\": \"Tiada\", \"noPhonePerayuResponden\": \"Tiada\"}',3203,'2024-12-13 14:44:50','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (6793,'{\"noKP\": \"910912-01-5014\", \"negaraO\": \"MYS\", \"poskodO\": \"81200\", \"category\": \"accused\", \"daerahId\": \"0102\", \"negeriId\": \"01\", \"daerahDesc\": \"JOHOR BAHRU\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"JOHOR\", \"guamanAgensi\": \"Tetuan Shaik Adam & Co\", \"namaPeguamTpr\": \"Encik Shaik Saleem\", \"officeAddressO\": \"No.20-01, Jalan Cenderasari 3, Taman Perbadanan Islam Larkin\", \"officePhoneNoO\": \"019-7707270\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Ramizah Binti Rahmat\", \"emailPerayuResponden\": \"Tiada\", \"noPhonePerayuResponden\": \"Tiada\"}',3203,'2024-12-13 14:47:16','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (7857,'{\"peranan\": \"Pesuruhjaya Kehakiman\", \"category\": \"corum\", \"namaPihak\": \"YA Puan Suriyati Hasimah Binti Mohd Hashim\"}',3658,'2025-03-12 22:37:18','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (7858,'{\"noKP\": \"Tidak Berkaitan\", \"negaraO\": \"MYS\", \"poskodO\": \"79100\", \"category\": \"prosecutors\", \"daerahId\": \"0102\", \"negeriId\": \"01\", \"daerahDesc\": \"JOHOR BAHRU\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"JOHOR\", \"guamanAgensi\": \"Pendakwa Raya\", \"namaPeguamTpr\": \"TPR Chan Lee Lee\", \"officeAddressO\": \"Aras 2, Bangungan Dato\' Jaafar Muhammad, 79100 Iskandar Puteri\", \"officePhoneNoO\": \"013-3339158\", \"PerayuRespondenId\": \"Pendakwa Raya\", \"namaPerayuResponden\": \"Pendakwa Raya\", \"emailPerayuResponden\": \"Tidak Berkaitan\", \"noPhonePerayuResponden\": \"Tidak Berkaitan\"}',3658,'2025-03-12 22:38:42','chanlee.lee',NULL,NULL);
|
||||
INSERT INTO `LT_LKK_PERSON_INVOLVE` (`LTL_PERSON_ID`,`LTL_DATA`,`LKK_INFOID`,`CREATEDDATE`,`CREATEDBY`,`UPDATEDDATE`,`UPDATEDBY`) VALUES (7859,'{\"noKP\": \"841019-14-5178\", \"negaraO\": \"MYS\", \"poskodO\": \"50400\", \"category\": \"accused\", \"daerahId\": \"1401\", \"negeriId\": \"14\", \"daerahDesc\": \"KUALA LUMPUR\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"WILAYAH PERSEKUTUAN (KUALA LUMPUR)\", \"guamanAgensi\": \"Tetuan T.Y. Teh & Partners\", \"namaPeguamTpr\": \"Encik Lim Chee Chau \", \"officeAddressO\": \"Suite B-11-7, Megan Avenue 1, No. 189 Jalan Tun Razak, 50400 Kuala Lumpur\", \"officePhoneNoO\": \"03-21647002\", \"PerayuRespondenId\": \"Tertuduh\", \"namaPerayuResponden\": \"Chong Kim Pooi\", \"emailPerayuResponden\": \"Tiada\", \"noPhonePerayuResponden\": \"Tiada\"}',3658,'2025-03-12 22:41:49','chanlee.lee',NULL,NULL);
|
BIN
Data/TPR Chan Lee Lee/Laporan_Keputusan_Kes (1).pdf
Normal file
BIN
Data/TPR Chan Lee Lee/Laporan_Keputusan_Kes (1).pdf
Normal file
Binary file not shown.
BIN
Data/TPR Chan Lee Lee/Laporan_Keputusan_Kes.pdf
Normal file
BIN
Data/TPR Chan Lee Lee/Laporan_Keputusan_Kes.pdf
Normal file
Binary file not shown.
BIN
Laporan_Keputusan_Kes 1.pdf
Normal file
BIN
Laporan_Keputusan_Kes 1.pdf
Normal file
Binary file not shown.
98
README.md
Normal file
98
README.md
Normal file
@ -0,0 +1,98 @@
|
||||
# AGC Document Chatbot
|
||||
|
||||
A Streamlit-based web application that provides intelligent search and chat capabilities for Attorney General's Chambers (AGC) documents. The system uses Retrieval-Augmented Generation (RAG) to enhance search accuracy and provide context-aware responses.
|
||||
|
||||
## Features
|
||||
|
||||
- **Document Browsing**: Browse through all available AGC documents with filtering by document type and title/content search
|
||||
- **Enhanced RAG Search**: Search documents using AI-enhanced query understanding
|
||||
- **Document Detail View**: View full document details with contextual information
|
||||
- **Chat Interface**: Chat with AI about document content with context-awareness
|
||||
|
||||
## Architecture
|
||||
|
||||
The application consists of several key components:
|
||||
|
||||
- **Web Interface**: Built with Streamlit
|
||||
- **Document Database**: MySQL database for storing document metadata and content
|
||||
- **Embedding Services**: Vector embeddings for semantic search capabilities
|
||||
- **RAG Enhancement**: Improved search using OpenAI's capabilities
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── app.py # Main Streamlit application
|
||||
├── config.py # Configuration settings
|
||||
├── db/ # Database utilities
|
||||
│ └── import_lkk_data.py # Script for importing LKK data
|
||||
├── embedding/ # Embedding and RAG services
|
||||
│ ├── embedding_service.py
|
||||
│ ├── enhanced_rag_service.py
|
||||
│ └── rag_service.py
|
||||
├── utils/ # Utility functions
|
||||
├── Data/ # Document data
|
||||
└── requirements.txt # Python dependencies
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
1. Clone the repository
|
||||
2. Create a virtual environment:
|
||||
```
|
||||
python -m venv venv
|
||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||
```
|
||||
3. Install dependencies:
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
4. Configure environment variables (create a `.env` file based on requirements)
|
||||
|
||||
## Database Setup
|
||||
|
||||
1. Install and run XAMPP:
|
||||
|
||||
- Download XAMPP from [https://www.apachefriends.org/](https://www.apachefriends.org/)
|
||||
- Install and launch XAMPP Control Panel
|
||||
- Start the Apache and MySQL services
|
||||
- Access phpMyAdmin at [http://localhost/phpmyadmin](http://localhost/phpmyadmin)
|
||||
- Create a new database named `agc`
|
||||
|
||||
2. Configure the database connection in your `.env` file:
|
||||
```
|
||||
MYSQL_HOST=localhost
|
||||
MYSQL_USER=root
|
||||
MYSQL_PASSWORD=
|
||||
MYSQL_DATABASE=agc
|
||||
```
|
||||
|
||||
## Data Import (Optional)
|
||||
|
||||
To import LKK (Laporan Keputusan Kes) data into the system:
|
||||
|
||||
```
|
||||
python -m db.import_lkk_data
|
||||
```
|
||||
|
||||
This script will:
|
||||
|
||||
- Set up required database tables
|
||||
- Import available data from SQL or PDF files in the Data directory
|
||||
- Generate document embeddings for search functionality
|
||||
|
||||
## Usage
|
||||
|
||||
Run the Streamlit application:
|
||||
|
||||
```
|
||||
streamlit run app.py
|
||||
```
|
||||
|
||||
The application will be available at http://localhost:8501 by default.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python 3.7+
|
||||
- MySQL database (via XAMPP)
|
||||
- OpenAI API key (for embedding and RAG features)
|
537
app.py
Normal file
537
app.py
Normal file
@ -0,0 +1,537 @@
|
||||
import streamlit as st
|
||||
from db.db_utils import get_all_documents, get_document
|
||||
from embedding.enhanced_rag_service import enhanced_rag_search
|
||||
from db.db_utils import get_search_history
|
||||
import re
|
||||
import json
|
||||
|
||||
# Set page configuration
|
||||
st.set_page_config(
|
||||
page_title="AGC Document Search",
|
||||
page_icon="📚",
|
||||
layout="wide"
|
||||
)
|
||||
|
||||
# Initialize session state for page navigation
|
||||
if "page" not in st.session_state:
|
||||
st.session_state.page = "browse"
|
||||
if "selected_document_id" not in st.session_state:
|
||||
st.session_state.selected_document_id = None
|
||||
if "current_query" not in st.session_state:
|
||||
st.session_state.current_query = ""
|
||||
if "messages" not in st.session_state:
|
||||
st.session_state.messages = []
|
||||
if "previous_page" not in st.session_state:
|
||||
st.session_state.previous_page = "browse"
|
||||
|
||||
# Function to change page
|
||||
def navigate_to_page(page, document_id=None, query=None):
|
||||
# Store the previous page before changing
|
||||
if page != st.session_state.page and page != "document_detail":
|
||||
st.session_state.previous_page = st.session_state.page
|
||||
|
||||
st.session_state.page = page
|
||||
if document_id is not None:
|
||||
st.session_state.selected_document_id = document_id
|
||||
if query is not None:
|
||||
st.session_state.current_query = query
|
||||
# Force a rerun to update the UI immediately
|
||||
st.rerun()
|
||||
|
||||
# Browse Documents Page
|
||||
def browse_documents_page():
|
||||
st.title("📚 AGC Document Browser")
|
||||
|
||||
# Add some CSS styling
|
||||
st.markdown("""
|
||||
<style>
|
||||
.document-card {
|
||||
background-color: #121212;
|
||||
border-radius: 10px;
|
||||
padding: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
border-left: 4px solid #4CAF50;
|
||||
}
|
||||
.document-title {
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 0.5rem;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
}
|
||||
.document-info {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 0.5rem;
|
||||
color: #bbb;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.document-preview {
|
||||
margin-top: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
background-color: #1e1e1e;
|
||||
border-radius: 5px;
|
||||
color: #eee;
|
||||
font-size: 0.9rem;
|
||||
max-height: 150px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.info-badge {
|
||||
background-color: #333;
|
||||
padding: 3px 8px;
|
||||
border-radius: 10px;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
""", unsafe_allow_html=True)
|
||||
|
||||
# Get all documents
|
||||
documents = get_all_documents()
|
||||
|
||||
# Create filters
|
||||
doc_types = list(set([doc.get('doc_type', 'Unknown') for doc in documents]))
|
||||
doc_types.insert(0, "All Types")
|
||||
|
||||
col1, col2 = st.columns(2)
|
||||
|
||||
with col1:
|
||||
selected_type = st.selectbox("Filter by document type:", doc_types)
|
||||
|
||||
with col2:
|
||||
title_filter = st.text_input("Filter by title or case number:", placeholder="Enter keywords")
|
||||
|
||||
# Apply filters
|
||||
filtered_docs = documents
|
||||
if selected_type and selected_type != "All Types":
|
||||
filtered_docs = [doc for doc in filtered_docs if doc.get('doc_type') == selected_type]
|
||||
|
||||
if title_filter:
|
||||
filtered_docs = [
|
||||
doc for doc in filtered_docs
|
||||
if title_filter.lower() in doc.get('title', '').lower() or
|
||||
title_filter.lower() in doc.get('content', '').lower()
|
||||
]
|
||||
|
||||
# Show count of filtered documents
|
||||
st.write(f"Showing {len(filtered_docs)} document(s)")
|
||||
|
||||
# Order documents by created_at date, newest first
|
||||
filtered_docs = sorted(filtered_docs, key=lambda d: d.get('created_at', ''), reverse=True)
|
||||
|
||||
# Create a better layout for documents
|
||||
for doc in filtered_docs:
|
||||
# Create a card display for each document
|
||||
st.markdown(f"""
|
||||
<div class="document-card">
|
||||
<div class="document-title">{doc.get('title', 'Untitled Document')}</div>
|
||||
<div class="document-info">
|
||||
<span class="info-badge">📄 {doc.get('doc_type', 'Unknown')}</span>
|
||||
<span class="info-badge">📂 {doc.get('source', 'Unknown Source')}</span>
|
||||
<span class="info-badge">⏰ {doc.get('created_at', 'Unknown Date')}</span>
|
||||
</div>
|
||||
""", unsafe_allow_html=True)
|
||||
|
||||
# Preview of content
|
||||
content = doc.get('content', '')
|
||||
|
||||
# Try to extract key information for the preview
|
||||
file_match = re.search(r"File Number:\s*([^\n]+)", content)
|
||||
status_match = re.search(r"Status:\s*([^\n]+)", content)
|
||||
|
||||
preview_parts = []
|
||||
if file_match:
|
||||
preview_parts.append(f"<b>File Number:</b> {file_match.group(1).strip()}")
|
||||
if status_match:
|
||||
preview_parts.append(f"<b>Status:</b> {status_match.group(1).strip()}")
|
||||
|
||||
# Add a snippet of the content
|
||||
preview_content = content[:200].replace("\n", " ").strip() + "..." if len(content) > 200 else content
|
||||
if not preview_parts:
|
||||
preview_parts = [preview_content]
|
||||
|
||||
preview = "<br>".join(preview_parts)
|
||||
st.markdown(f'<div class="document-preview">{preview}</div>', unsafe_allow_html=True)
|
||||
|
||||
# Button to view full document
|
||||
col1, col2 = st.columns([4, 1])
|
||||
with col2:
|
||||
if st.button(f"View Details", key=f"doc_btn_{doc.get('id', 0)}"):
|
||||
# Store current page for return navigation
|
||||
st.session_state.previous_page = "browse"
|
||||
navigate_to_page("document_detail", doc.get('id'))
|
||||
|
||||
st.markdown('</div>', unsafe_allow_html=True)
|
||||
|
||||
# Search Documents Page
|
||||
def search_documents_page():
|
||||
st.title("Search AGC Documents")
|
||||
|
||||
search_query = st.text_input("Search documents:", placeholder="Enter search terms")
|
||||
|
||||
if search_query:
|
||||
# Display a spinner while searching
|
||||
with st.spinner("Searching documents with OpenAI-enhanced query..."):
|
||||
# Use enhanced RAG search
|
||||
results = enhanced_rag_search(search_query, profile_search=False)
|
||||
|
||||
# Display the enhanced query that was used
|
||||
if "enhanced_query" in results and results["enhanced_query"] != search_query:
|
||||
st.info(f"Search query was enhanced to: '{results['enhanced_query']}'")
|
||||
|
||||
# Display results
|
||||
st.subheader("Search Results")
|
||||
|
||||
if results["documents"]:
|
||||
for doc in results["documents"]:
|
||||
st.markdown(f"**{doc.get('title', 'Untitled')}** (Relevance: {doc['similarity']:.2f})")
|
||||
st.markdown(f"**Type:** {doc.get('doc_type', 'Unknown')}")
|
||||
st.markdown(f"{doc.get('content_preview', '')}")
|
||||
|
||||
# Button to view full document
|
||||
if st.button(f"View Details", key=f"result_btn_{doc.get('id', 0)}"):
|
||||
# Store current page for return navigation
|
||||
st.session_state.previous_page = "search"
|
||||
navigate_to_page("document_detail", doc.get('id'))
|
||||
|
||||
st.markdown("---")
|
||||
else:
|
||||
st.info("No matching documents found.")
|
||||
|
||||
# Chat Interface Page
|
||||
def chat_interface_page():
|
||||
st.title("Chat with AGC Documents")
|
||||
st.write("Ask questions about AGC documents in the database! OpenAI will enhance your query and provide better answers.")
|
||||
|
||||
# Display chat history
|
||||
for msg_idx, message in enumerate(st.session_state.messages):
|
||||
with st.chat_message(message["role"]):
|
||||
st.markdown(message["content"])
|
||||
|
||||
# Show query enhancement if available
|
||||
if message["role"] == "assistant" and "enhanced_query" in message:
|
||||
with st.expander("See how your query was enhanced"):
|
||||
st.markdown(f"**Original query:** {message['original_query']}")
|
||||
st.markdown(f"**Enhanced query:** {message['enhanced_query']}")
|
||||
|
||||
# Display document buttons if available
|
||||
if message["role"] == "assistant" and "document_results" in message:
|
||||
st.markdown("**Relevant Documents:**")
|
||||
for doc_idx, doc in enumerate(message["document_results"]):
|
||||
st.markdown(f"- **{doc.get('title', 'Untitled')}** (Relevance: {doc['similarity']:.2f})")
|
||||
st.markdown(f" {doc.get('content_preview', '')}")
|
||||
# Button to navigate to document detail page - add message index to ensure unique keys
|
||||
if st.button(f"View Full Document", key=f"history_doc_btn_{msg_idx}_{doc_idx}_{doc.get('id', 0)}"):
|
||||
# Store current page for return navigation
|
||||
st.session_state.previous_page = "chat"
|
||||
navigate_to_page("document_detail", doc.get('id'))
|
||||
|
||||
# Chat input
|
||||
query = st.chat_input("What would you like to know about AGC documents?")
|
||||
|
||||
if query:
|
||||
# Add user message to chat history
|
||||
st.session_state.messages.append({"role": "user", "content": query})
|
||||
|
||||
# Display user message
|
||||
with st.chat_message("user"):
|
||||
st.markdown(query)
|
||||
|
||||
# Get response using enhanced RAG search
|
||||
with st.chat_message("assistant"):
|
||||
with st.spinner("Searching documents with OpenAI-enhanced query..."):
|
||||
results = enhanced_rag_search(query, profile_search=False)
|
||||
|
||||
# Display assistant response
|
||||
st.markdown(results["answer"])
|
||||
|
||||
# Store relevant documents for displaying in chat history
|
||||
relevant_docs = []
|
||||
if results["documents"]:
|
||||
# Filter for high relevance documents
|
||||
relevant_docs = [
|
||||
doc for doc in results["documents"]
|
||||
if doc['similarity'] > 0.7
|
||||
]
|
||||
|
||||
if relevant_docs:
|
||||
st.markdown(f"**Relevant Documents:**")
|
||||
for doc_idx, doc in enumerate(relevant_docs):
|
||||
st.markdown(f"- **{doc.get('title', 'Untitled')}** (Relevance: {doc['similarity']:.2f})")
|
||||
st.markdown(f" {doc.get('content_preview', '')}")
|
||||
# Add button to view full document details - use current_chat suffix for unique keys
|
||||
if st.button(f"View Full Document", key=f"current_chat_doc_btn_{doc_idx}_{doc.get('id', 0)}"):
|
||||
# Store current page for return navigation
|
||||
st.session_state.previous_page = "chat"
|
||||
navigate_to_page("document_detail", doc.get('id'))
|
||||
else:
|
||||
st.info("No highly relevant documents found.")
|
||||
|
||||
# Show enhancement information
|
||||
with st.expander("See how your query was enhanced"):
|
||||
st.markdown(f"**Original query:** {query}")
|
||||
st.markdown(f"**Enhanced query:** {results.get('enhanced_query', query)}")
|
||||
|
||||
# Add assistant response to chat history with enhancement info and document results
|
||||
st.session_state.messages.append({
|
||||
"role": "assistant",
|
||||
"content": results["answer"],
|
||||
"original_query": query,
|
||||
"enhanced_query": results.get("enhanced_query", query),
|
||||
"document_results": relevant_docs if relevant_docs else []
|
||||
})
|
||||
|
||||
# Document detail page
|
||||
def document_detail_page():
|
||||
# Back button at the top
|
||||
if st.button("← Back to Previous Page"):
|
||||
# Return to the page that linked to this document
|
||||
if st.session_state.get("previous_page"):
|
||||
navigate_to_page(st.session_state.get("previous_page"))
|
||||
else:
|
||||
navigate_to_page("browse")
|
||||
|
||||
# Get the selected document
|
||||
doc = get_document(st.session_state.selected_document_id)
|
||||
|
||||
if not doc:
|
||||
st.error(f"Document not found with ID: {st.session_state.selected_document_id}")
|
||||
return
|
||||
|
||||
# Create a card-like container for document
|
||||
doc_container = st.container()
|
||||
|
||||
with doc_container:
|
||||
# Add styling with CSS
|
||||
st.markdown("""
|
||||
<style>
|
||||
.doc-header {
|
||||
padding: 1rem;
|
||||
background-color: #1e1e1e;
|
||||
color: white;
|
||||
border-radius: 10px 10px 0 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.doc-content {
|
||||
padding: 1.5rem;
|
||||
background-color: #121212;
|
||||
color: white;
|
||||
border: 1px solid #333;
|
||||
border-radius: 0 0 10px 10px;
|
||||
margin-top: 0;
|
||||
}
|
||||
.section-header {
|
||||
background-color: #333;
|
||||
padding: 0.5rem;
|
||||
border-radius: 5px;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.data-row {
|
||||
display: flex;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.data-label {
|
||||
font-weight: bold;
|
||||
min-width: 150px;
|
||||
}
|
||||
.allegation {
|
||||
background-color: #1e1e1e;
|
||||
border-left: 4px solid #4CAF50;
|
||||
padding: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 0 5px 5px 0;
|
||||
}
|
||||
.person {
|
||||
background-color: #1e1e1e;
|
||||
border-left: 4px solid #2196F3;
|
||||
padding: 0.7rem;
|
||||
margin-bottom: 0.5rem;
|
||||
border-radius: 0 5px 5px 0;
|
||||
}
|
||||
</style>
|
||||
""", unsafe_allow_html=True)
|
||||
|
||||
# Document Content
|
||||
content = doc.get('content', '')
|
||||
doc_type = doc.get('doc_type', 'Unknown')
|
||||
|
||||
# Document header with title
|
||||
st.markdown(f'<div class="doc-header"><h1>{doc.get("title", "Untitled Document")}</h1></div>',
|
||||
unsafe_allow_html=True)
|
||||
|
||||
# Document content
|
||||
st.markdown('<div class="doc-content">', unsafe_allow_html=True)
|
||||
|
||||
# Create two columns for document information
|
||||
col1, col2 = st.columns(2)
|
||||
|
||||
with col1:
|
||||
# Display document info with icons
|
||||
st.markdown('<h2>Document Information</h2>', unsafe_allow_html=True)
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">📄 Type:</span> {doc_type}</div>', unsafe_allow_html=True)
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">📁 Source:</span> {doc.get("source", "Unknown")}</div>', unsafe_allow_html=True)
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">⏰ Added:</span> {doc.get("created_at", "Unknown")}</div>', unsafe_allow_html=True)
|
||||
|
||||
with col2:
|
||||
# Display additional info
|
||||
st.markdown('<h2>Additional Information</h2>', unsafe_allow_html=True)
|
||||
|
||||
# Parse key information from content
|
||||
file_match = re.search(r"File Number:\s*([^\n]+)", content)
|
||||
status_match = re.search(r"Status:\s*([^\n]+)", content)
|
||||
dpp_match = re.search(r"DPP Suggestion:\s*([^\n]+)", content)
|
||||
hod_match = re.search(r"HOD Decision:\s*([^\n]+)", content)
|
||||
|
||||
if file_match:
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">📃 File Number:</span> {file_match.group(1).strip()}</div>', unsafe_allow_html=True)
|
||||
if status_match:
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">🔄 Status:</span> {status_match.group(1).strip()}</div>', unsafe_allow_html=True)
|
||||
if dpp_match:
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">📝 DPP Suggestion:</span> {dpp_match.group(1).strip()}</div>', unsafe_allow_html=True)
|
||||
if hod_match:
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">⚖️ HOD Decision:</span> {hod_match.group(1).strip()}</div>', unsafe_allow_html=True)
|
||||
|
||||
# Display the formatted content
|
||||
st.markdown('<h2 class="section-header">Case Details</h2>', unsafe_allow_html=True)
|
||||
|
||||
# Extract and format allegations
|
||||
allegations_sections = re.split(r"ALLEGATION #\d+:", content)
|
||||
if len(allegations_sections) > 1:
|
||||
st.markdown('<h3>Allegations</h3>', unsafe_allow_html=True)
|
||||
|
||||
# First section contains the header info, skip it
|
||||
header_info = allegations_sections[0]
|
||||
|
||||
# Show basic case information
|
||||
basic_info_parts = header_info.split("--- ALLEGATIONS ---")[0].strip().split("\n")
|
||||
for info in basic_info_parts:
|
||||
if info and ":" in info:
|
||||
label, value = info.split(":", 1)
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">{label}:</span> {value.strip()}</div>',
|
||||
unsafe_allow_html=True)
|
||||
|
||||
# Process each allegation
|
||||
for i, allegation in enumerate(allegations_sections[1:], 1):
|
||||
st.markdown(f'<div class="allegation">', unsafe_allow_html=True)
|
||||
st.markdown(f'<h4>Allegation #{i}</h4>', unsafe_allow_html=True)
|
||||
|
||||
# Clean up HTML tags
|
||||
allegation = re.sub(r'<[^>]+>', '', allegation)
|
||||
|
||||
# Format the allegation details
|
||||
details = allegation.strip().split("\n")
|
||||
for detail in details:
|
||||
if detail.strip() and ":" in detail:
|
||||
try:
|
||||
label, value = detail.split(":", 1)
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">{label}:</span> {value.strip()}</div>',
|
||||
unsafe_allow_html=True)
|
||||
except:
|
||||
# If splitting fails, just display the line
|
||||
st.markdown(f'{detail.strip()}', unsafe_allow_html=True)
|
||||
|
||||
st.markdown('</div>', unsafe_allow_html=True)
|
||||
|
||||
# Extract and format involved persons
|
||||
persons_section = re.search(r"--- INVOLVED PERSONS ---\s*([\s\S]*?)(?:$|---)", content)
|
||||
if persons_section:
|
||||
st.markdown('<h3>Involved Persons</h3>', unsafe_allow_html=True)
|
||||
|
||||
persons_text = persons_section.group(1).strip()
|
||||
person_entries = persons_text.split("\nPerson ID:")
|
||||
|
||||
for i, person_entry in enumerate(person_entries):
|
||||
if i == 0 and not person_entry.startswith("Person ID:"):
|
||||
# Skip if it's not a proper person entry
|
||||
continue
|
||||
|
||||
if i == 0:
|
||||
# First entry already has "Person ID:" prefix
|
||||
person_entry = person_entry.strip()
|
||||
else:
|
||||
# Add back the prefix for other entries
|
||||
person_entry = f"Person ID:{person_entry.strip()}"
|
||||
|
||||
# Process individual person entry
|
||||
if person_entry.strip():
|
||||
st.markdown(f'<div class="person">', unsafe_allow_html=True)
|
||||
|
||||
# Extract Person ID
|
||||
id_match = re.search(r"Person ID:\s*(\d+)", person_entry)
|
||||
if id_match:
|
||||
person_id = id_match.group(1)
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">Person ID:</span> {person_id}</div>', unsafe_allow_html=True)
|
||||
|
||||
# Extract and format Person Data
|
||||
data_match = re.search(r"Person Data:\s*({.*})", person_entry, re.DOTALL)
|
||||
if data_match:
|
||||
try:
|
||||
# Try to parse and pretty format the JSON
|
||||
json_str = data_match.group(1)
|
||||
person_data = json.loads(json_str)
|
||||
|
||||
# Display formatted person data
|
||||
if isinstance(person_data, dict):
|
||||
for key, value in person_data.items():
|
||||
if value: # Only show non-empty values
|
||||
# Format the key with proper capitalization and spaces
|
||||
formatted_key = key.replace("_", " ").title()
|
||||
st.markdown(f'<div class="data-row"><span class="data-label">{formatted_key}:</span> {value}</div>', unsafe_allow_html=True)
|
||||
else:
|
||||
st.text(json_str)
|
||||
except json.JSONDecodeError:
|
||||
# If JSON parsing fails, show the raw text
|
||||
st.text(data_match.group(1))
|
||||
else:
|
||||
# Display the raw person entry if no JSON data found
|
||||
st.markdown(person_entry, unsafe_allow_html=True)
|
||||
|
||||
st.markdown('</div>', unsafe_allow_html=True)
|
||||
|
||||
st.markdown('</div>', unsafe_allow_html=True)
|
||||
|
||||
# Back button at the bottom
|
||||
if st.button("← Back to Previous Page", key="back_bottom"):
|
||||
if st.session_state.get("previous_page"):
|
||||
navigate_to_page(st.session_state.get("previous_page"))
|
||||
else:
|
||||
navigate_to_page("browse")
|
||||
|
||||
# Main page with navigation
|
||||
def main_page():
|
||||
# Check if we're on the document detail page
|
||||
if st.session_state.page == "document_detail":
|
||||
# Display the document detail page as a full page without sidebar
|
||||
document_detail_page()
|
||||
else:
|
||||
# Create a sidebar for navigation
|
||||
st.sidebar.title("Navigation")
|
||||
|
||||
page = st.sidebar.radio(
|
||||
"Select a page:",
|
||||
["Browse Documents", "Search Documents", "Chat Interface"],
|
||||
format_func=lambda x: x,
|
||||
index=0 if st.session_state.page == "browse" else
|
||||
1 if st.session_state.page == "search" else
|
||||
2 if st.session_state.page == "chat" else 0
|
||||
)
|
||||
|
||||
# Navigate to the selected page
|
||||
if page == "Browse Documents":
|
||||
st.session_state.page = "browse"
|
||||
elif page == "Search Documents":
|
||||
st.session_state.page = "search"
|
||||
elif page == "Chat Interface":
|
||||
st.session_state.page = "chat"
|
||||
|
||||
# Render the appropriate page based on session state
|
||||
if st.session_state.page == "browse":
|
||||
browse_documents_page()
|
||||
elif st.session_state.page == "search":
|
||||
search_documents_page()
|
||||
elif st.session_state.page == "chat":
|
||||
chat_interface_page()
|
||||
|
||||
# Run the app
|
||||
if __name__ == "__main__":
|
||||
main_page()
|
23
config.py
Normal file
23
config.py
Normal file
@ -0,0 +1,23 @@
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
|
||||
# Database configuration
|
||||
DB_CONFIG = {
|
||||
'host': os.getenv('MYSQL_HOST', '47.130.80.140'),
|
||||
'user': os.getenv('MYSQL_USER', 'root'),
|
||||
'password': os.getenv('MYSQL_PASSWORD', '1ibL5A5cGevvM7Ax0ZDqyKXQTHMlEW5D5hwG6OcR7KPF77kMkEfxFEbLDtwzr6Ci'),
|
||||
'database': os.getenv('MYSQL_DATABASE', 'agc'),
|
||||
'port': int(os.getenv('MYSQL_PORT', '3333'))
|
||||
}
|
||||
|
||||
# OpenAI configuration
|
||||
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
|
||||
OPENAI_EMBEDDING_MODEL = os.getenv('OPENAI_EMBEDDING_MODEL', 'text-embedding-ada-002')
|
||||
OPENAI_CHAT_MODEL = os.getenv('OPENAI_CHAT_MODEL', 'gpt-3.5-turbo')
|
||||
|
||||
# Application settings
|
||||
MAX_SEARCH_RESULTS = int(os.getenv('MAX_SEARCH_RESULTS', 10))
|
||||
SIMILARITY_THRESHOLD = float(os.getenv('SIMILARITY_THRESHOLD', 0.7))
|
263
db/db_utils.py
Normal file
263
db/db_utils.py
Normal file
@ -0,0 +1,263 @@
|
||||
import json
|
||||
import mysql.connector
|
||||
import numpy as np
|
||||
from config import DB_CONFIG
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
from typing import List, Dict, Any, Optional
|
||||
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
|
||||
def get_db_connection():
|
||||
"""Create a connection to the MySQL database"""
|
||||
return mysql.connector.connect(**DB_CONFIG)
|
||||
|
||||
|
||||
def add_document(title, content, source=None, doc_type=None):
|
||||
"""Add a document to the database and return its ID"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
query = """
|
||||
INSERT INTO documents (title, content, source, doc_type)
|
||||
VALUES (%s, %s, %s, %s)
|
||||
"""
|
||||
|
||||
cursor.execute(query, (title, content, source, doc_type))
|
||||
document_id = cursor.lastrowid
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return document_id
|
||||
|
||||
|
||||
def store_embedding(document_id, embedding):
|
||||
"""Store an embedding for a document"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Convert numpy array to list and store as JSON
|
||||
embedding_json = json.dumps(embedding.tolist() if isinstance(embedding, np.ndarray) else embedding)
|
||||
|
||||
query = """
|
||||
INSERT INTO embeddings (document_id, embedding)
|
||||
VALUES (%s, %s)
|
||||
"""
|
||||
|
||||
cursor.execute(query, (document_id, embedding_json))
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def get_all_documents(include_embeddings: bool = False) -> List[Dict[str, Any]]:
|
||||
"""Get all documents from the database"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
if include_embeddings:
|
||||
# Get documents with their embeddings
|
||||
cursor.execute("""
|
||||
SELECT d.*, e.embedding
|
||||
FROM documents d
|
||||
LEFT JOIN embeddings e ON d.id = e.document_id
|
||||
ORDER BY d.created_at DESC
|
||||
""")
|
||||
else:
|
||||
# Get documents without embeddings
|
||||
cursor.execute("""
|
||||
SELECT * FROM documents
|
||||
ORDER BY created_at DESC
|
||||
""")
|
||||
|
||||
documents = cursor.fetchall()
|
||||
return documents
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error fetching documents: {err}")
|
||||
return []
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def get_document(doc_id: int) -> Optional[Dict[str, Any]]:
|
||||
"""Get a specific document by ID"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
# Get document with its embedding
|
||||
cursor.execute("""
|
||||
SELECT d.*, e.embedding
|
||||
FROM documents d
|
||||
LEFT JOIN embeddings e ON d.id = e.document_id
|
||||
WHERE d.id = %s
|
||||
""", (doc_id,))
|
||||
|
||||
document = cursor.fetchone()
|
||||
return document
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error fetching document {doc_id}: {err}")
|
||||
return None
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def get_all_embeddings():
|
||||
"""Get all embeddings with their associated documents"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
query = """
|
||||
SELECT e.id, e.document_id, e.embedding, d.title, d.content, d.source, d.doc_type
|
||||
FROM embeddings e
|
||||
JOIN documents d ON e.document_id = d.id
|
||||
"""
|
||||
|
||||
cursor.execute(query)
|
||||
results = cursor.fetchall()
|
||||
|
||||
# Convert JSON strings to Python lists
|
||||
for result in results:
|
||||
result['embedding'] = json.loads(result['embedding'])
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return results
|
||||
|
||||
def log_search(query, results):
|
||||
"""Log a search query and its results"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
query_sql = """
|
||||
INSERT INTO search_logs (query, results)
|
||||
VALUES (%s, %s)
|
||||
"""
|
||||
|
||||
results_json = json.dumps(results)
|
||||
cursor.execute(query_sql, (query, results_json))
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def search_documents_by_keyword(keyword, limit=10):
|
||||
"""Basic keyword search in documents"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
query = """
|
||||
SELECT * FROM documents
|
||||
WHERE MATCH(title, content) AGAINST(%s IN NATURAL LANGUAGE MODE)
|
||||
LIMIT %s
|
||||
"""
|
||||
|
||||
cursor.execute(query, (keyword, limit))
|
||||
results = cursor.fetchall()
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return results
|
||||
|
||||
def get_search_history() -> List[Dict[str, Any]]:
|
||||
"""Get search history"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
cursor.execute("""
|
||||
SELECT * FROM search_logs
|
||||
ORDER BY created_at DESC
|
||||
LIMIT 100
|
||||
""")
|
||||
|
||||
history = cursor.fetchall()
|
||||
return history
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error fetching search history: {err}")
|
||||
return []
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def add_document(title: str, content: str, source: str = None, doc_type: str = None) -> Optional[int]:
|
||||
"""Add a new document to the database"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
cursor.execute("""
|
||||
INSERT INTO documents (title, content, source, doc_type)
|
||||
VALUES (%s, %s, %s, %s)
|
||||
""", (title, content, source, doc_type))
|
||||
|
||||
doc_id = cursor.lastrowid
|
||||
conn.commit()
|
||||
return doc_id
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error adding document: {err}")
|
||||
conn.rollback()
|
||||
return None
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def store_embedding(doc_id: int, embedding: List[float]) -> bool:
|
||||
"""Store embedding for a document"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
cursor.execute("""
|
||||
INSERT INTO embeddings (document_id, embedding)
|
||||
VALUES (%s, %s)
|
||||
""", (doc_id, embedding))
|
||||
|
||||
conn.commit()
|
||||
return True
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error storing embedding for document {doc_id}: {err}")
|
||||
conn.rollback()
|
||||
return False
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def log_search(query: str, results: Dict[str, Any]) -> bool:
|
||||
"""Log a search query and its results"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
cursor.execute("""
|
||||
INSERT INTO search_logs (query, results)
|
||||
VALUES (%s, %s)
|
||||
""", (query, results))
|
||||
|
||||
conn.commit()
|
||||
return True
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error logging search: {err}")
|
||||
conn.rollback()
|
||||
return False
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
746
db/import_lkk_data.py
Normal file
746
db/import_lkk_data.py
Normal file
@ -0,0 +1,746 @@
|
||||
import os
|
||||
import json
|
||||
import mysql.connector
|
||||
import numpy as np
|
||||
import re
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
|
||||
# Print environment variables for debugging
|
||||
print(f"MySQL Host: {os.getenv('MYSQL_HOST')}")
|
||||
print(f"MySQL User: {os.getenv('MYSQL_USER')}")
|
||||
print(f"MySQL Database: {os.getenv('MYSQL_DATABASE')}")
|
||||
print(f"MySQL Password: {'[SET]' if os.getenv('MYSQL_PASSWORD') else '[NOT SET]'}")
|
||||
|
||||
# Database configuration
|
||||
DB_CONFIG = {
|
||||
'host': os.getenv('MYSQL_HOST', 'localhost'),
|
||||
'user': os.getenv('MYSQL_USER', 'root'),
|
||||
'password': os.getenv('MYSQL_PASSWORD', ''),
|
||||
'database': os.getenv('MYSQL_DATABASE', 'agc')
|
||||
}
|
||||
|
||||
def get_db_connection():
|
||||
"""Create a connection to the MySQL database"""
|
||||
return mysql.connector.connect(**DB_CONFIG)
|
||||
|
||||
def truncate_all_tables():
|
||||
"""Truncate all tables to remove existing data before importing new data"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
print("Truncating all tables to ensure a clean import...")
|
||||
|
||||
# Disable foreign key checks temporarily to allow truncating tables with foreign keys
|
||||
cursor.execute("SET FOREIGN_KEY_CHECKS = 0;")
|
||||
|
||||
try:
|
||||
# Get all tables in the database
|
||||
cursor.execute("SHOW TABLES;")
|
||||
tables = cursor.fetchall()
|
||||
|
||||
for table in tables:
|
||||
table_name = table[0]
|
||||
print(f"Truncating table: {table_name}")
|
||||
cursor.execute(f"TRUNCATE TABLE {table_name};")
|
||||
|
||||
print(f"Successfully truncated {len(tables)} tables")
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error truncating tables: {err}")
|
||||
finally:
|
||||
# Re-enable foreign key checks
|
||||
cursor.execute("SET FOREIGN_KEY_CHECKS = 1;")
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def setup_tables():
|
||||
"""Create the tables for document search if they don't exist"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Create document_search tables
|
||||
schema_sql = """
|
||||
-- Documents table
|
||||
CREATE TABLE IF NOT EXISTS documents (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
source VARCHAR(255),
|
||||
doc_type VARCHAR(50),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Embeddings table - store as JSON since MySQL doesn't have a vector type
|
||||
CREATE TABLE IF NOT EXISTS embeddings (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
document_id INT NOT NULL,
|
||||
embedding JSON NOT NULL,
|
||||
FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Search history
|
||||
CREATE TABLE IF NOT EXISTS search_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
query TEXT NOT NULL,
|
||||
results JSON,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
"""
|
||||
|
||||
# Execute schema SQL statements
|
||||
for statement in schema_sql.split(';'):
|
||||
if statement.strip():
|
||||
try:
|
||||
cursor.execute(statement + ';')
|
||||
print(f"Executed: {statement[:50]}...")
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error executing statement: {err}")
|
||||
print(f"Statement: {statement}")
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
print("Document search tables created successfully")
|
||||
|
||||
def extract_sql_inserts(file_path, table_name):
|
||||
"""Extract SQL INSERT statements from file and return as a list of SQL statements"""
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8', errors='ignore') as file:
|
||||
content = file.read()
|
||||
|
||||
# Extract all INSERT statements for the specified table
|
||||
pattern = rf"INSERT INTO {table_name}[^;]*;"
|
||||
inserts = re.findall(pattern, content, re.DOTALL)
|
||||
|
||||
# Clean up the inserts to make them more compatible
|
||||
cleaned_inserts = []
|
||||
for insert in inserts:
|
||||
# Replace TEXT fields that might have problematic characters
|
||||
# This is a simplistic approach - for a production system, you'd need more robust parsing
|
||||
if 'TEXT' in insert or 'text' in insert or 'Text' in insert:
|
||||
# Try to handle the quotes better
|
||||
insert = re.sub(r"'([^']*?)<([^>]*?)>'", r"'\\1<\\2>'", insert)
|
||||
|
||||
cleaned_inserts.append(insert)
|
||||
|
||||
return cleaned_inserts
|
||||
except Exception as e:
|
||||
print(f"Error reading SQL file {file_path}: {e}")
|
||||
return []
|
||||
|
||||
def execute_sql_statements(statements):
|
||||
"""Execute a list of SQL statements"""
|
||||
if not statements:
|
||||
return
|
||||
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
successful = 0
|
||||
failed = 0
|
||||
|
||||
for statement in statements:
|
||||
try:
|
||||
cursor.execute(statement)
|
||||
successful += 1
|
||||
except mysql.connector.Error as err:
|
||||
# Skip duplicate key errors
|
||||
if err.errno == 1062: # Duplicate entry error
|
||||
print(f"Skipping duplicate entry: {err}")
|
||||
else:
|
||||
print(f"Error executing SQL: {err}")
|
||||
print(f"Statement: {statement[:100]}...") # Print first 100 chars of the statement
|
||||
failed += 1
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
print(f"Executed {successful} statements successfully, {failed} statements failed")
|
||||
|
||||
def scan_directory_for_sql_files(directory):
|
||||
"""Scan a directory and its subdirectories for SQL files"""
|
||||
sql_files = {
|
||||
'info': [],
|
||||
'allegation': [],
|
||||
'person': []
|
||||
}
|
||||
|
||||
# Walk through the directory
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.endswith('.sql'):
|
||||
full_path = os.path.join(root, file)
|
||||
|
||||
# Categorize files
|
||||
if 'LT_LKK_INFO' in file:
|
||||
sql_files['info'].append(full_path)
|
||||
elif 'LT_LKK_ALLEGATION' in file:
|
||||
sql_files['allegation'].append(full_path)
|
||||
elif 'LT_LKK_PERSON' in file or 'PERSON_RESPONSIBLE' in file:
|
||||
sql_files['person'].append(full_path)
|
||||
|
||||
return sql_files
|
||||
|
||||
def extract_case_data_from_directory(directory_path):
|
||||
"""Extract legal case data directly from a directory"""
|
||||
# Get the directory name (category)
|
||||
category = os.path.basename(directory_path)
|
||||
|
||||
# Dictionary to store case data
|
||||
cases = []
|
||||
|
||||
# Look for PDF files first
|
||||
pdf_files = []
|
||||
for file in os.listdir(directory_path):
|
||||
if file.lower().endswith('.pdf'):
|
||||
pdf_files.append(os.path.join(directory_path, file))
|
||||
|
||||
# Look for SQL files to extract data
|
||||
info_files = []
|
||||
allegation_files = []
|
||||
person_files = []
|
||||
|
||||
for file in os.listdir(directory_path):
|
||||
if file.endswith('.sql'):
|
||||
full_path = os.path.join(directory_path, file)
|
||||
if 'LT_LKK_INFO' in file:
|
||||
info_files.append(full_path)
|
||||
elif 'LT_LKK_ALLEGATION' in file:
|
||||
allegation_files.append(full_path)
|
||||
elif 'LT_LKK_PERSON' in file or 'PERSON_RESPONSIBLE' in file:
|
||||
person_files.append(full_path)
|
||||
|
||||
# Create a basic case from the directory
|
||||
case = {
|
||||
'title': f"Legal Case - {category}",
|
||||
'content': f"Legal category: {category}\n",
|
||||
'source': directory_path,
|
||||
'doc_type': "Legal Case Category",
|
||||
'pdf_files': pdf_files
|
||||
}
|
||||
|
||||
cases.append(case)
|
||||
|
||||
return cases
|
||||
|
||||
def import_pdf_files(directory):
|
||||
"""Import PDF files as documents"""
|
||||
# Import required modules
|
||||
sys.path.append('.') # Add current directory to path
|
||||
from db.db_utils import add_document, store_embedding
|
||||
|
||||
try:
|
||||
from embedding.embedding_service import generate_embedding
|
||||
except Exception as e:
|
||||
print(f"Error importing regular embedding service: {e}")
|
||||
print("Falling back to HTTP-based embedding service...")
|
||||
from embedding.embedding_service_http import generate_embedding
|
||||
|
||||
imported_count = 0
|
||||
|
||||
# Walk through the directory
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.lower().endswith('.pdf'):
|
||||
try:
|
||||
full_path = os.path.join(root, file)
|
||||
|
||||
# Get the category from directory name
|
||||
category = os.path.basename(root)
|
||||
|
||||
# Try to extract text from PDF (would need a PDF library)
|
||||
# For now, we'll just use the filename as content
|
||||
print(f"Found PDF: {full_path}")
|
||||
|
||||
# For a real implementation, you would use PyPDF2 or a similar library
|
||||
# This is a placeholder for actual PDF text extraction
|
||||
title = file.replace('.pdf', '')
|
||||
content = f"PDF Document: {file} from category {category}\n\nSource: {full_path}"
|
||||
|
||||
# Add document to the database
|
||||
doc_id = add_document(
|
||||
title=title,
|
||||
content=content,
|
||||
source=full_path,
|
||||
doc_type="Legal PDF Document"
|
||||
)
|
||||
|
||||
# Generate and store embedding
|
||||
embedding = generate_embedding(f"{title} {content}")
|
||||
store_embedding(doc_id, embedding)
|
||||
|
||||
print(f"Added PDF document: {title}")
|
||||
imported_count += 1
|
||||
except Exception as e:
|
||||
print(f"Error processing PDF {file}: {e}")
|
||||
|
||||
return imported_count
|
||||
|
||||
def import_data_from_directory(directory):
|
||||
"""Import data directly from each category directory"""
|
||||
# Import required modules
|
||||
sys.path.append('.') # Add current directory to path
|
||||
from db.db_utils import add_document, store_embedding
|
||||
|
||||
try:
|
||||
from embedding.embedding_service import generate_embedding
|
||||
except Exception as e:
|
||||
print(f"Error importing regular embedding service: {e}")
|
||||
print("Falling back to HTTP-based embedding service...")
|
||||
from embedding.embedding_service_http import generate_embedding
|
||||
|
||||
# Count for imported documents
|
||||
imported_count = 0
|
||||
|
||||
# Get all subdirectories
|
||||
try:
|
||||
subdirs = [os.path.join(directory, d) for d in os.listdir(directory)
|
||||
if os.path.isdir(os.path.join(directory, d))]
|
||||
|
||||
print(f"Found {len(subdirs)} category directories")
|
||||
|
||||
# Process each directory
|
||||
for subdir in subdirs:
|
||||
category = os.path.basename(subdir)
|
||||
print(f"Processing directory: {category}")
|
||||
|
||||
# Extract cases from the directory
|
||||
cases = extract_case_data_from_directory(subdir)
|
||||
|
||||
# Add each case as a document
|
||||
for case in cases:
|
||||
doc_id = add_document(
|
||||
title=case['title'],
|
||||
content=case['content'],
|
||||
source=case['source'],
|
||||
doc_type=case['doc_type']
|
||||
)
|
||||
|
||||
# Generate and store embedding
|
||||
embedding = generate_embedding(f"{case['title']} {case['content']}")
|
||||
store_embedding(doc_id, embedding)
|
||||
|
||||
print(f"Added document: {case['title']}")
|
||||
imported_count += 1
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error scanning directories: {e}")
|
||||
|
||||
return imported_count
|
||||
|
||||
def import_sql_data_to_db():
|
||||
"""Import SQL files from Data directory into the database"""
|
||||
data_dir = os.path.join(os.getcwd(), 'Data')
|
||||
|
||||
print(f"Scanning directory: {data_dir}")
|
||||
sql_files = scan_directory_for_sql_files(data_dir)
|
||||
|
||||
print(f"Found {len(sql_files['info'])} info files, {len(sql_files['allegation'])} allegation files, {len(sql_files['person'])} person files")
|
||||
|
||||
# Import info files
|
||||
for file_path in sql_files['info']:
|
||||
print(f"Importing info from {file_path}")
|
||||
statements = extract_sql_inserts(file_path, 'LT_LKK_INFO')
|
||||
execute_sql_statements(statements)
|
||||
|
||||
# Import allegation files
|
||||
for file_path in sql_files['allegation']:
|
||||
print(f"Importing allegations from {file_path}")
|
||||
statements = extract_sql_inserts(file_path, 'LT_LKK_ALLEGATION')
|
||||
execute_sql_statements(statements)
|
||||
|
||||
# Import person files
|
||||
for file_path in sql_files['person']:
|
||||
print(f"Importing persons from {file_path}")
|
||||
statements = extract_sql_inserts(file_path, 'LT_LKK_PERSON_INVOLVE')
|
||||
execute_sql_statements(statements)
|
||||
|
||||
print("SQL data import complete!")
|
||||
|
||||
# Import directly from directories
|
||||
print("Importing data directly from directories...")
|
||||
dir_docs = import_data_from_directory(data_dir)
|
||||
print(f"Imported {dir_docs} documents from directories")
|
||||
|
||||
# Also import PDF files
|
||||
print("Looking for PDF files...")
|
||||
pdf_docs = import_pdf_files(data_dir)
|
||||
print(f"Imported {pdf_docs} PDF documents")
|
||||
|
||||
def check_tables(db_config, label):
|
||||
"""Check tables in the specified database"""
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Get all tables
|
||||
cursor.execute("SHOW TABLES;")
|
||||
tables = cursor.fetchall()
|
||||
|
||||
print(f"\n{label} tables in database {db_config['database']}:")
|
||||
|
||||
for table in tables:
|
||||
table_name = table[0]
|
||||
|
||||
# Count records
|
||||
cursor.execute(f"SELECT COUNT(*) FROM {table_name};")
|
||||
count = cursor.fetchone()[0]
|
||||
|
||||
print(f" {table_name}: {count} records")
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def convert_user_data_to_documents():
|
||||
"""Convert user data to documents in our application"""
|
||||
# Import required modules
|
||||
sys.path.append('.') # Add current directory to path
|
||||
try:
|
||||
from db.db_utils import add_document, store_embedding
|
||||
from embedding.embedding_service_http import generate_embedding
|
||||
except Exception as e:
|
||||
print(f"Error importing required modules: {e}")
|
||||
return
|
||||
|
||||
# Connect to the source database
|
||||
source_conn = get_db_connection()
|
||||
source_cursor = source_conn.cursor(dictionary=True)
|
||||
|
||||
# Get all users with their details and preferences - adjusted for actual schema
|
||||
try:
|
||||
query = """
|
||||
SELECT
|
||||
u.user_id, u.username, u.email, u.created_at,
|
||||
ud.first_name, ud.last_name, ud.date_of_birth, ud.phone_number,
|
||||
up.language, up.theme, up.notifications_enabled
|
||||
FROM users u
|
||||
LEFT JOIN user_details ud ON u.user_id = ud.user_id
|
||||
LEFT JOIN user_preferences up ON u.user_id = up.user_id
|
||||
"""
|
||||
|
||||
source_cursor.execute(query)
|
||||
user_records = source_cursor.fetchall()
|
||||
|
||||
if not user_records:
|
||||
print("No user records found in source database.")
|
||||
return
|
||||
|
||||
print(f"Found {len(user_records)} user records to convert")
|
||||
|
||||
# Process each user as a document
|
||||
user_count = 0
|
||||
|
||||
for user in user_records:
|
||||
user_id = user.get('user_id')
|
||||
|
||||
# Create title with user information
|
||||
username = user.get('username', f"User {user_id}")
|
||||
title = f"User Profile: {username}"
|
||||
|
||||
# Compile content from specific fields based on the schema
|
||||
content_parts = [
|
||||
f"Username: {user.get('username', 'N/A')}",
|
||||
f"Email: {user.get('email', 'N/A')}",
|
||||
f"Created At: {user.get('created_at', 'N/A')}"
|
||||
]
|
||||
|
||||
# Add user details if available
|
||||
if user.get('first_name') or user.get('last_name'):
|
||||
name = f"{user.get('first_name', '')} {user.get('last_name', '')}".strip()
|
||||
content_parts.append(f"Name: {name}")
|
||||
|
||||
if user.get('date_of_birth'):
|
||||
content_parts.append(f"Date of Birth: {user.get('date_of_birth')}")
|
||||
|
||||
if user.get('phone_number'):
|
||||
content_parts.append(f"Phone Number: {user.get('phone_number')}")
|
||||
|
||||
# Add user preferences if available
|
||||
if user.get('language'):
|
||||
content_parts.append(f"Language: {user.get('language')}")
|
||||
|
||||
if user.get('theme'):
|
||||
content_parts.append(f"Theme: {user.get('theme')}")
|
||||
|
||||
if user.get('notifications_enabled') is not None:
|
||||
notifications = "Enabled" if user.get('notifications_enabled') else "Disabled"
|
||||
content_parts.append(f"Notifications: {notifications}")
|
||||
|
||||
# Combine all content
|
||||
content = "\n".join(content_parts)
|
||||
|
||||
# Add document to the database
|
||||
print(f"Adding document for user {username}")
|
||||
|
||||
doc_id = add_document(
|
||||
title=title,
|
||||
content=content,
|
||||
source=f"User ID: {user_id} from docdoc database",
|
||||
doc_type="User Profile"
|
||||
)
|
||||
|
||||
# Generate and store embedding
|
||||
print(f"Generating embedding for document: {doc_id}")
|
||||
embedding = generate_embedding(f"{title} {content}")
|
||||
store_embedding(doc_id, embedding)
|
||||
|
||||
user_count += 1
|
||||
|
||||
print(f"Conversion complete! Created {user_count} user profile documents.")
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error accessing user data: {err}")
|
||||
finally:
|
||||
source_cursor.close()
|
||||
source_conn.close()
|
||||
|
||||
def setup_document_tables():
|
||||
"""Create the document-related tables if they don't exist"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Create document search tables
|
||||
schema_sql = """
|
||||
-- Documents table for storing processed LKK data
|
||||
CREATE TABLE IF NOT EXISTS documents (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
source VARCHAR(255),
|
||||
doc_type VARCHAR(50),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
LKK_INFOID INT,
|
||||
FOREIGN KEY (LKK_INFOID) REFERENCES lt_lkk_info(LKK_INFOID)
|
||||
);
|
||||
|
||||
-- Embeddings table for semantic search
|
||||
CREATE TABLE IF NOT EXISTS embeddings (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
document_id INT NOT NULL,
|
||||
embedding JSON NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Search history
|
||||
CREATE TABLE IF NOT EXISTS search_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
query TEXT NOT NULL,
|
||||
results JSON,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
"""
|
||||
|
||||
# Drop existing tables if they exist
|
||||
cursor.execute("DROP TABLE IF EXISTS embeddings;")
|
||||
cursor.execute("DROP TABLE IF EXISTS documents;")
|
||||
cursor.execute("DROP TABLE IF EXISTS search_logs;")
|
||||
|
||||
# Execute schema SQL statements
|
||||
for statement in schema_sql.split(';'):
|
||||
if statement.strip():
|
||||
try:
|
||||
cursor.execute(statement + ';')
|
||||
print(f"Executed: {statement[:50]}...")
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Error executing statement: {err}")
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
def convert_lkk_to_documents():
|
||||
"""Convert LKK data into searchable documents based on LLA_CASE_NO"""
|
||||
# Import required modules for embeddings
|
||||
sys.path.append('.')
|
||||
try:
|
||||
from embedding.embedding_service import generate_embedding
|
||||
except Exception as e:
|
||||
print(f"Error importing embedding service: {e}")
|
||||
print("Falling back to HTTP-based embedding service...")
|
||||
from embedding.embedding_service_http import generate_embedding
|
||||
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
# Step 1: Get all unique case numbers from allegations
|
||||
cursor.execute("""
|
||||
SELECT DISTINCT LLA_CASE_NO
|
||||
FROM lt_lkk_allegation
|
||||
WHERE LLA_CASE_NO IS NOT NULL AND LLA_CASE_NO != ''
|
||||
""")
|
||||
|
||||
case_numbers = cursor.fetchall()
|
||||
print(f"Found {len(case_numbers)} unique case numbers to process")
|
||||
|
||||
for case_number_row in case_numbers:
|
||||
case_number = case_number_row['LLA_CASE_NO']
|
||||
try:
|
||||
# Step 2: For each case number, get all relevant data from allegations and info tables
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
i.*,
|
||||
a.*
|
||||
FROM lt_lkk_allegation a
|
||||
JOIN lt_lkk_info i ON a.LKK_INFOID = i.LKK_INFOID
|
||||
WHERE a.LLA_CASE_NO = %s
|
||||
GROUP BY a.LLA_ALLEGATION_ID
|
||||
""", (case_number,))
|
||||
|
||||
allegation_records = cursor.fetchall()
|
||||
|
||||
if not allegation_records:
|
||||
print(f"No records found for case number {case_number}")
|
||||
continue
|
||||
|
||||
# Get the first record to extract basic info
|
||||
first_record = allegation_records[0]
|
||||
lkk_infoid = first_record['LKK_INFOID']
|
||||
|
||||
# Step 3: Get person data separately
|
||||
cursor.execute("""
|
||||
SELECT LTL_PERSON_ID, LTL_DATA
|
||||
FROM lt_lkk_person_involve
|
||||
WHERE LKK_INFOID = %s
|
||||
""", (lkk_infoid,))
|
||||
|
||||
person_records = cursor.fetchall()
|
||||
involved_persons = []
|
||||
|
||||
for person in person_records:
|
||||
person_id = person['LTL_PERSON_ID']
|
||||
try:
|
||||
# Parse person data from JSON
|
||||
person_data = {}
|
||||
if person['LTL_DATA']:
|
||||
try:
|
||||
person_data = json.loads(person['LTL_DATA'])
|
||||
except:
|
||||
print(f"Error parsing LTL_DATA JSON for person ID {person_id}")
|
||||
|
||||
# Instead of just showing the ID, include the full LTL_DATA content
|
||||
person_info = f"Person ID: {person_id}"
|
||||
|
||||
# Add the full JSON data
|
||||
if person['LTL_DATA']:
|
||||
person_info = f"Person ID: {person_id}\nPerson Data: {person['LTL_DATA']}"
|
||||
|
||||
involved_persons.append(person_info)
|
||||
except Exception as e:
|
||||
print(f"Error processing person data for ID {person_id}: {e}")
|
||||
|
||||
# Start with basic case info
|
||||
base_info = {
|
||||
'case_number': case_number,
|
||||
'file_number': first_record['LKK_FILE_NO'],
|
||||
'status': first_record['LKK_STATUS'],
|
||||
'dpp_suggestion': first_record['LKK_DPP_ANT_SUGGESTION'],
|
||||
'hod_decision': first_record['LKK_HOD_DECISION'],
|
||||
'lkk_infoid': lkk_infoid,
|
||||
'created_date': first_record['LKK_CREATEDDATE']
|
||||
}
|
||||
|
||||
# Title using case number
|
||||
title = f"Case Number: {case_number}"
|
||||
|
||||
# Compile content
|
||||
content_parts = [
|
||||
f"File Number: {base_info['file_number']}",
|
||||
f"Status: {base_info['status']}",
|
||||
f"Case Number: {case_number}",
|
||||
f"DPP Suggestion: {base_info['dpp_suggestion'] or 'None'}",
|
||||
f"HOD Decision: {base_info['hod_decision'] or 'None'}",
|
||||
"\n--- ALLEGATIONS ---"
|
||||
]
|
||||
|
||||
# Add all allegations
|
||||
for idx, record in enumerate(allegation_records, 1):
|
||||
allegation_parts = [
|
||||
f"\nALLEGATION #{idx}:",
|
||||
f"Allegation ID: {record['LLA_ALLEGATION_ID']}",
|
||||
f"Case Number: {record['LLA_CASE_NO']}",
|
||||
f"Accused Name: {record['LLA_OKT_NAME'] or 'N/A'}",
|
||||
f"Type: {record['LLA_TYPE'] or 'N/A'}",
|
||||
f"Act ID: {record['LLA_ACT_ID'] or 'N/A'}",
|
||||
f"Act Description: {record['LLA_ACT_DESC'] or 'N/A'}",
|
||||
f"Section: {record['LLA_SECTION'] or 'N/A'}",
|
||||
f"Date: {record['LLA_DATE']}",
|
||||
f"Charge Notes: {record['LLA_CHARGE_NOTES'] or 'N/A'}",
|
||||
f"Charge Type: {record['LKK_CHARGE_TYPE'] or 'N/A'}",
|
||||
f"Charge Reason: {record['LLA_CHARGE_REASON'] or 'N/A'}",
|
||||
f"Charged By: {record['LLA_CHARGE_BY'] or 'N/A'}"
|
||||
]
|
||||
content_parts.extend(allegation_parts)
|
||||
|
||||
# Add involved persons section
|
||||
if involved_persons:
|
||||
content_parts.append("\n--- INVOLVED PERSONS ---")
|
||||
for person in involved_persons:
|
||||
content_parts.append(person)
|
||||
|
||||
# Join all content
|
||||
content = "\n".join(filter(None, content_parts))
|
||||
|
||||
# Insert into documents table
|
||||
cursor.execute("""
|
||||
INSERT INTO documents (title, content, source, doc_type, LKK_INFOID, created_at)
|
||||
VALUES (%s, %s, %s, %s, %s, %s)
|
||||
""", (
|
||||
title,
|
||||
content,
|
||||
f"Case Number: {case_number}",
|
||||
"Legal Case",
|
||||
base_info['lkk_infoid'],
|
||||
base_info['created_date']
|
||||
))
|
||||
|
||||
doc_id = cursor.lastrowid
|
||||
|
||||
# Generate and store embedding
|
||||
embedding = generate_embedding(f"{title} {content}")
|
||||
|
||||
# Convert numpy array to list if necessary
|
||||
if isinstance(embedding, np.ndarray):
|
||||
embedding = embedding.tolist()
|
||||
|
||||
cursor.execute("""
|
||||
INSERT INTO embeddings (document_id, embedding)
|
||||
VALUES (%s, %s)
|
||||
""", (doc_id, json.dumps(embedding)))
|
||||
|
||||
conn.commit()
|
||||
print(f"Processed case number {case_number} into document {doc_id}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error processing case number {case_number}: {e}")
|
||||
conn.rollback()
|
||||
|
||||
except mysql.connector.Error as err:
|
||||
print(f"Database error: {err}")
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Ask for confirmation before proceeding
|
||||
print("This script will convert LKK data into searchable documents.")
|
||||
confirm = input("Do you want to proceed? (y/n): ")
|
||||
|
||||
if confirm.lower() != 'y':
|
||||
print("Import cancelled.")
|
||||
sys.exit(0)
|
||||
|
||||
# Set up document tables
|
||||
setup_document_tables()
|
||||
|
||||
# Convert LKK data to documents
|
||||
convert_lkk_to_documents()
|
||||
|
||||
print("\nData conversion completed successfully!")
|
29
db/schema.sql
Normal file
29
db/schema.sql
Normal file
@ -0,0 +1,29 @@
|
||||
CREATE DATABASE IF NOT EXISTS DOCUMENT_SEARCH;
|
||||
|
||||
USE DOCUMENT_SEARCH;
|
||||
|
||||
-- Documents table
|
||||
CREATE TABLE IF NOT EXISTS DOCUMENTS (
|
||||
ID INT AUTO_INCREMENT PRIMARY KEY,
|
||||
TITLE VARCHAR(255) NOT NULL,
|
||||
CONTENT TEXT NOT NULL,
|
||||
SOURCE VARCHAR(255),
|
||||
DOC_TYPE VARCHAR(50),
|
||||
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Embeddings table - store as JSON since MySQL doesn't have a vector type
|
||||
CREATE TABLE IF NOT EXISTS EMBEDDINGS (
|
||||
ID INT AUTO_INCREMENT PRIMARY KEY,
|
||||
DOCUMENT_ID INT NOT NULL,
|
||||
EMBEDDING JSON NOT NULL,
|
||||
FOREIGN KEY (DOCUMENT_ID) REFERENCES DOCUMENTS(ID) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Search history
|
||||
CREATE TABLE IF NOT EXISTS SEARCH_LOGS (
|
||||
ID INT AUTO_INCREMENT PRIMARY KEY,
|
||||
QUERY TEXT NOT NULL,
|
||||
RESULTS JSON,
|
||||
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
41
draft/LT_LKK_ALLEGATION 1.sql
Normal file
41
draft/LT_LKK_ALLEGATION 1.sql
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_ALLEGATION WHERE LKK_INFOID = '2463'
|
||||
-- Date: 2025-03-11 17:18
|
||||
*/
|
||||
INSERT INTO LT_LKK_ALLEGATION (
|
||||
`LLA_ALLEGATION_ID`,
|
||||
`LKK_INFOID`,
|
||||
`LLA_TYPE`,
|
||||
`LLA_CASE_NO`,
|
||||
`LLA_OKT_NAME`,
|
||||
`LLA_ACT_ID`,
|
||||
`LLA_ACT_DESC`,
|
||||
`LLA_SECTION`,
|
||||
`LLA_DATE`,
|
||||
`LLA_CHARGE_NOTES`,
|
||||
`LKK_CHARGE_TYPE`,
|
||||
`CREATEDDATE`,
|
||||
`CREATEDBY`,
|
||||
`UPDATEDDATE`,
|
||||
`UPDATEDBY`,
|
||||
`LLA_CHARGE_REASON`,
|
||||
`LLA_CHARGE_BY`
|
||||
) VALUES (
|
||||
6154,
|
||||
'2463',
|
||||
'charge1',
|
||||
'JA-41LB-10-11/2023',
|
||||
'SOORIYA MOOTHY A/L RAMIAH',
|
||||
297,
|
||||
'297/AKTA PENCEGAHAN JENAYAH 1959',
|
||||
'Seksyen 15(2)(C) Akta Pencegahan Jenayah 1959 ',
|
||||
NULL,
|
||||
'<p style=\"margin-left:38px; text-align:justify\"> </p>\n\n<p style=\"margin-left:38px; text-align:justify\"><em>‘Bahawa kamu pada 31 Disember 2020 jam lebih kurang 2.45 petang dapati telah meninggalkan kawasan Mukim Bandar Padang Endau, Daerah Mersing dengan berada di hadapan Sekolah Kebangsaan Tanjung Gemok, dalam Daerah Rompin iaitu diluar kawasan Mukim Bandar Padang Endau sebagai seorang yang ditempatkan dibawah pengawasan polis Seksyen 15 APJ 1959 [03:26] KDN ULPJK as 7004/4/1824 dikehendaki tinggal dalam kawasan Mukim Bandar Padang Endau Daerah Mersing selama 4 tahun mulai 5 September 2019 sehingga 4 September 2023 tidak boleh meninggalkan Mukim Bandar Padang Endau tanpa kebenaran bertulis daripada Ketua Polis Johor. Hendaklah sentiasa memberitahu dimana – mana rumah atau tempat di mana kamu tinggal kepada Ketua Polis Daerah Mersing. Kamu hendaklah berada di dalam rumah atau tempat di mana kamu tinggal di antara jam 8 malam dan 6 pagi melainkan mendapat kebenaran khas daripada Ketua Polis Daerah Mersing dan hendaklah melaporkan diri kepada Balai Polis Endau pada setiap Isnin, Rabu dan Jumaat pada tahun pertama. Isnin dan Khamis pada tahun kedua, ketiga dan keempat mengikut Perintah Pengawasan Polis yang dilanjutkan oleh Menteri Dalam Negeri Malaysia. Kamu telah didapati melanggar syarat tersebut kerana berada di luar kawasan Mukim Bandar Padang Endau Daerah Mersing Negeri Johor tanpa kebenaran secara bertulis daripada Ketua Polis Johor. Oleh yang demikian, kamu telah melakukan kesalahan di bawah Seksyen 15 (2) (c) Akta Pencegahan Jenayah 1959 dan boleh dihukum dibawah Seksyen 15 (4) Akta Pencegahan Jenayah 1959. </em></p>\n\n<p style=\"margin-left:38px; text-align:justify\"> </p>\n',
|
||||
NULL,
|
||||
'2024-08-13 11:16:31',
|
||||
'ahmad.khairuddin',
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
113
draft/LT_LKK_INFO 1.sql
Normal file
113
draft/LT_LKK_INFO 1.sql
Normal file
File diff suppressed because one or more lines are too long
57
draft/LT_LKK_PERSON_INVOLVE 1.sql
Normal file
57
draft/LT_LKK_PERSON_INVOLVE 1.sql
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
-- Query: SELECT * FROM ilims_usr.LT_LKK_PERSON_INVOLVE WHERE LKK_INFOID = '2463'
|
||||
-- Date: 2025-03-11 17:19
|
||||
*/
|
||||
INSERT INTO LT_LKK_PERSON_INVOLVE (
|
||||
`LTL_PERSON_ID`,
|
||||
`LTL_DATA`,
|
||||
`LKK_INFOID`,
|
||||
`CREATEDDATE`,
|
||||
`CREATEDBY`,
|
||||
`UPDATEDDATE`,
|
||||
`UPDATEDBY`
|
||||
) VALUES (
|
||||
5250,
|
||||
'{\"peranan\": \"Pesuruhjaya Kehakiman\", \"category\": \"corum\", \"namaPihak\": \"Y.A. Puan Suriyati Hasimah binti Mohd Hashim\"}',
|
||||
2463,
|
||||
'2024-08-13 11:08:00',
|
||||
'ahmad.khairuddin',
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
INSERT INTO LT_LKK_PERSON_INVOLVE (
|
||||
`LTL_PERSON_ID`,
|
||||
`LTL_DATA`,
|
||||
`LKK_INFOID`,
|
||||
`CREATEDDATE`,
|
||||
`CREATEDBY`,
|
||||
`UPDATEDDATE`,
|
||||
`UPDATEDBY`
|
||||
) VALUES (
|
||||
5251,
|
||||
'{\"noKP\": \"-\", \"negaraO\": \"MYS\", \"poskodO\": \"81100\", \"category\": \"appellant\", \"daerahId\": \"0102\", \"negeriId\": \"01\", \"daerahDesc\": \"JOHOR BAHRU\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"JOHOR\", \"guamanAgensi\": \"PEJABAT PENASIHAT UNDANG-UNDANG NEGERI JOHOR\", \"namaPeguamTpr\": \"-\", \"officeAddressO\": \"Aras 2, Bangunan Dato Jaafar Muhammad,\\r\\nKota Iskandar\\r\\n79100 Iskandar Puteri\\r\\nJohor Darul Takzim\", \"officePhoneNoO\": \"07-266 1104\", \"PerayuRespondenId\": \"Perayu\", \"namaPerayuResponden\": \"AHMAD KHAIRUDDIN BIN KHALID\", \"emailPerayuResponden\": \"ahmad.khairuddin@agc.gov.my\", \"noPhonePerayuResponden\": \"014-3110401\"}',
|
||||
2463,
|
||||
'2024-08-13 11:10:43',
|
||||
'ahmad.khairuddin',
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
INSERT INTO LT_LKK_PERSON_INVOLVE (
|
||||
`LTL_PERSON_ID`,
|
||||
`LTL_DATA`,
|
||||
`LKK_INFOID`,
|
||||
`CREATEDDATE`,
|
||||
`CREATEDBY`,
|
||||
`UPDATEDDATE`,
|
||||
`UPDATEDBY`
|
||||
) VALUES (
|
||||
5253,
|
||||
'{\"noKP\": \"801019-04-5285\", \"negaraO\": \"MYS\", \"poskodO\": \"7300\", \"category\": \"respondent\", \"daerahId\": \"0401\", \"negeriId\": \"04\", \"daerahDesc\": \"MELAKA TENGAH\", \"negaraDesc\": \"MALAYSIA\", \"negeriDesc\": \"MELAKA\", \"guamanAgensi\": \"Tetuan Suresh Balakrishnan & Co. \", \"namaPeguamTpr\": \"Suresh\", \"officeAddressO\": \"204, Rumah Awam, \\r\\nPulau Sebang 3, \\r\\n73000 Tampin, Melaka \", \"officePhoneNoO\": \"-\", \"PerayuRespondenId\": \"Responden\", \"namaPerayuResponden\": \"SOORIYA MOOTHY A/L RAMIAH\", \"emailPerayuResponden\": \"-\", \"noPhonePerayuResponden\": \"-\"}',
|
||||
2463,
|
||||
'2024-08-13 11:12:57',
|
||||
'ahmad.khairuddin',
|
||||
NULL,
|
||||
NULL
|
||||
);
|
49
embedding/embedding_service.py
Normal file
49
embedding/embedding_service.py
Normal file
@ -0,0 +1,49 @@
|
||||
import numpy as np
|
||||
from openai import OpenAI
|
||||
import httpx
|
||||
from config import OPENAI_API_KEY, OPENAI_EMBEDDING_MODEL
|
||||
import os
|
||||
|
||||
# Print API key for debugging (only first few characters)
|
||||
api_key = OPENAI_API_KEY
|
||||
if api_key:
|
||||
masked_key = api_key[:8] + "..." + api_key[-4:]
|
||||
print(f"OpenAI API Key: {masked_key}")
|
||||
else:
|
||||
print("OpenAI API Key not found!")
|
||||
|
||||
# Initialize OpenAI client with explicitly configured httpx client to avoid proxy issues
|
||||
http_client = httpx.Client()
|
||||
client = OpenAI(api_key=OPENAI_API_KEY, http_client=http_client)
|
||||
|
||||
def generate_embedding(text):
|
||||
"""Generate an embedding vector for text using OpenAI"""
|
||||
response = client.embeddings.create(
|
||||
input=text,
|
||||
model=OPENAI_EMBEDDING_MODEL
|
||||
)
|
||||
|
||||
# Return embedding as numpy array
|
||||
return np.array(response.data[0].embedding)
|
||||
|
||||
def cosine_similarity(vec_a, vec_b):
|
||||
"""Calculate cosine similarity between two vectors"""
|
||||
return np.dot(vec_a, vec_b) / (np.linalg.norm(vec_a) * np.linalg.norm(vec_b))
|
||||
|
||||
def search_similar_documents(query_embedding, document_embeddings, top_k=5, threshold=0.7):
|
||||
"""Find documents most similar to query based on embedding similarity"""
|
||||
similarities = []
|
||||
|
||||
for doc in document_embeddings:
|
||||
doc_embedding = np.array(doc['embedding'])
|
||||
similarity = cosine_similarity(query_embedding, doc_embedding)
|
||||
|
||||
# Only include documents above similarity threshold
|
||||
if similarity >= threshold:
|
||||
similarities.append((doc, similarity))
|
||||
|
||||
# Sort by similarity (highest first)
|
||||
similarities.sort(key=lambda x: x[1], reverse=True)
|
||||
|
||||
# Return top_k results
|
||||
return similarities[:top_k]
|
56
embedding/embedding_service_http.py
Normal file
56
embedding/embedding_service_http.py
Normal file
@ -0,0 +1,56 @@
|
||||
import numpy as np
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
from config import OPENAI_API_KEY, OPENAI_EMBEDDING_MODEL
|
||||
|
||||
def generate_embedding(text):
|
||||
"""Generate an embedding vector for text using OpenAI API via direct HTTP request"""
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {OPENAI_API_KEY}"
|
||||
}
|
||||
|
||||
payload = {
|
||||
"input": text,
|
||||
"model": OPENAI_EMBEDDING_MODEL
|
||||
}
|
||||
|
||||
print(f"Requesting embedding using model: {OPENAI_EMBEDDING_MODEL}")
|
||||
|
||||
response = requests.post(
|
||||
"https://api.openai.com/v1/embeddings",
|
||||
headers=headers,
|
||||
json=payload
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
raise Exception(f"Error from OpenAI API: {response.text}")
|
||||
|
||||
result = response.json()
|
||||
print(f"Successfully generated embedding of dimension: {len(result['data'][0]['embedding'])}")
|
||||
|
||||
# Return the embedding as a numpy array
|
||||
return np.array(result["data"][0]["embedding"])
|
||||
|
||||
def cosine_similarity(vec_a, vec_b):
|
||||
"""Calculate cosine similarity between two vectors"""
|
||||
return np.dot(vec_a, vec_b) / (np.linalg.norm(vec_a) * np.linalg.norm(vec_b))
|
||||
|
||||
def search_similar_documents(query_embedding, document_embeddings, top_k=5, threshold=0.7):
|
||||
"""Find documents most similar to query based on embedding similarity"""
|
||||
similarities = []
|
||||
|
||||
for doc in document_embeddings:
|
||||
doc_embedding = np.array(doc['embedding'])
|
||||
similarity = cosine_similarity(query_embedding, doc_embedding)
|
||||
|
||||
# Only include documents above similarity threshold
|
||||
if similarity >= threshold:
|
||||
similarities.append((doc, similarity))
|
||||
|
||||
# Sort by similarity (highest first)
|
||||
similarities.sort(key=lambda x: x[1], reverse=True)
|
||||
|
||||
# Return top_k results
|
||||
return similarities[:top_k]
|
149
embedding/enhanced_rag_service.py
Normal file
149
embedding/enhanced_rag_service.py
Normal file
@ -0,0 +1,149 @@
|
||||
import os
|
||||
import json
|
||||
import numpy as np
|
||||
from typing import List, Dict, Any
|
||||
from db.db_utils import get_all_documents, get_document
|
||||
import openai
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
|
||||
# Configure OpenAI
|
||||
openai.api_key = os.getenv('OPENAI_API_KEY')
|
||||
EMBEDDING_MODEL = "text-embedding-ada-002"
|
||||
CHAT_MODEL = "gpt-3.5-turbo"
|
||||
|
||||
def generate_embedding(text: str) -> List[float]:
|
||||
"""Generate embedding for the given text using OpenAI's API"""
|
||||
response = openai.Embedding.create(
|
||||
model=EMBEDDING_MODEL,
|
||||
input=text
|
||||
)
|
||||
return response['data'][0]['embedding']
|
||||
|
||||
def cosine_similarity(a: List[float], b: List[float]) -> float:
|
||||
"""Calculate cosine similarity between two vectors"""
|
||||
a = np.array(a)
|
||||
b = np.array(b)
|
||||
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
|
||||
|
||||
def enhance_search_query(query: str) -> str:
|
||||
"""Enhance the search query using OpenAI's chat model"""
|
||||
try:
|
||||
messages = [
|
||||
{"role": "system", "content": "You are a legal search expert. Your task is to enhance the given search query to improve search results in a legal document database. Keep the enhanced query concise and focused on the key legal concepts and facts."},
|
||||
{"role": "user", "content": f"Please enhance this search query for searching in legal documents: {query}"}
|
||||
]
|
||||
|
||||
response = openai.ChatCompletion.create(
|
||||
model=CHAT_MODEL,
|
||||
messages=messages,
|
||||
temperature=0.3,
|
||||
max_tokens=100
|
||||
)
|
||||
|
||||
enhanced_query = response['choices'][0]['message']['content'].strip()
|
||||
return enhanced_query
|
||||
except Exception as e:
|
||||
print(f"Error enhancing query: {e}")
|
||||
return query
|
||||
|
||||
def get_relevant_documents(query: str, documents: List[Dict[str, Any]], top_k: int = 5) -> List[Dict[str, Any]]:
|
||||
"""Get the most relevant documents for the query"""
|
||||
# Generate embedding for the query
|
||||
query_embedding = generate_embedding(query)
|
||||
|
||||
# Calculate similarities with all documents
|
||||
results = []
|
||||
for doc in documents:
|
||||
try:
|
||||
doc_embedding = json.loads(doc['embedding'])
|
||||
similarity = cosine_similarity(query_embedding, doc_embedding)
|
||||
|
||||
# Create a preview of the content
|
||||
content = doc['content']
|
||||
content_preview = content[:300] + "..." if len(content) > 300 else content
|
||||
|
||||
results.append({
|
||||
'id': doc['id'],
|
||||
'title': doc['title'],
|
||||
'content': doc['content'],
|
||||
'content_preview': content_preview,
|
||||
'doc_type': doc['doc_type'],
|
||||
'similarity': similarity
|
||||
})
|
||||
except Exception as e:
|
||||
print(f"Error processing document {doc.get('id')}: {e}")
|
||||
continue
|
||||
|
||||
# Sort by similarity and return top_k results
|
||||
results.sort(key=lambda x: x['similarity'], reverse=True)
|
||||
return results[:top_k]
|
||||
|
||||
def generate_answer(query: str, relevant_docs: List[Dict[str, Any]]) -> str:
|
||||
"""Generate an answer based on the query and relevant documents"""
|
||||
# Prepare context from relevant documents
|
||||
context = "\n\n".join([
|
||||
f"Document {i+1}:\nTitle: {doc['title']}\nContent: {doc['content']}"
|
||||
for i, doc in enumerate(relevant_docs)
|
||||
])
|
||||
|
||||
try:
|
||||
messages = [
|
||||
{"role": "system", "content": """You are a legal assistant helping to answer questions about legal cases.
|
||||
Use the provided document context to answer questions accurately and professionally.
|
||||
If the information is not available in the context, say so clearly."""},
|
||||
{"role": "user", "content": f"Context:\n{context}\n\nQuestion: {query}\n\nPlease provide a clear and accurate answer based on the above context:"}
|
||||
]
|
||||
|
||||
response = openai.ChatCompletion.create(
|
||||
model=CHAT_MODEL,
|
||||
messages=messages,
|
||||
temperature=0.5,
|
||||
max_tokens=500
|
||||
)
|
||||
|
||||
return response['choices'][0]['message']['content'].strip()
|
||||
except Exception as e:
|
||||
print(f"Error generating answer: {e}")
|
||||
return "I apologize, but I encountered an error while generating the answer. Please try rephrasing your question."
|
||||
|
||||
def enhanced_rag_search(query: str, profile_search: bool = False) -> Dict[str, Any]:
|
||||
"""
|
||||
Perform enhanced RAG search on the documents
|
||||
|
||||
Args:
|
||||
query: The search query
|
||||
profile_search: Whether to search in user profiles (not used currently)
|
||||
|
||||
Returns:
|
||||
Dict containing search results and generated answer
|
||||
"""
|
||||
try:
|
||||
# Enhance the query
|
||||
enhanced_query = enhance_search_query(query)
|
||||
|
||||
# Get all documents with their embeddings
|
||||
documents = get_all_documents(include_embeddings=True)
|
||||
|
||||
# Get relevant documents
|
||||
relevant_docs = get_relevant_documents(enhanced_query, documents)
|
||||
|
||||
# Generate answer
|
||||
answer = generate_answer(query, relevant_docs)
|
||||
|
||||
return {
|
||||
"query": query,
|
||||
"enhanced_query": enhanced_query,
|
||||
"documents": relevant_docs,
|
||||
"answer": answer
|
||||
}
|
||||
except Exception as e:
|
||||
print(f"Error in enhanced RAG search: {e}")
|
||||
return {
|
||||
"query": query,
|
||||
"enhanced_query": query,
|
||||
"documents": [],
|
||||
"answer": "I apologize, but I encountered an error while processing your query. Please try again."
|
||||
}
|
100
embedding/rag_service.py
Normal file
100
embedding/rag_service.py
Normal file
@ -0,0 +1,100 @@
|
||||
import json
|
||||
import requests
|
||||
from embedding.embedding_service_http import generate_embedding, search_similar_documents
|
||||
from db.db_utils import get_all_embeddings, log_search
|
||||
from config import OPENAI_API_KEY, OPENAI_CHAT_MODEL, MAX_SEARCH_RESULTS, SIMILARITY_THRESHOLD
|
||||
|
||||
def rag_search(query):
|
||||
"""
|
||||
Perform RAG (Retrieval Augmented Generation) search:
|
||||
1. Generate embedding for the query
|
||||
2. Find similar documents
|
||||
3. Generate an answer based on retrieved documents
|
||||
"""
|
||||
# Generate embedding for the query
|
||||
query_embedding = generate_embedding(query)
|
||||
|
||||
# Get all document embeddings from the database
|
||||
document_embeddings = get_all_embeddings()
|
||||
|
||||
# Find similar documents
|
||||
similar_docs = search_similar_documents(
|
||||
query_embedding,
|
||||
document_embeddings,
|
||||
top_k=MAX_SEARCH_RESULTS,
|
||||
threshold=SIMILARITY_THRESHOLD
|
||||
)
|
||||
|
||||
# Extract document contents for context
|
||||
contexts = []
|
||||
result_docs = []
|
||||
|
||||
print("Debug - Similar docs:", [(doc['document_id'], doc['title']) for doc, _ in similar_docs])
|
||||
|
||||
for doc, similarity in similar_docs:
|
||||
# Add document to contexts for the LLM
|
||||
contexts.append(f"Document Title: {doc['title']}\nContent: {doc['content']}\nSource: {doc['source'] or 'Unknown'}\nRelevance: {similarity:.4f}")
|
||||
|
||||
# Add document to results for display - ensure we use the right ID
|
||||
result_docs.append({
|
||||
"id": doc['document_id'], # This should be the ID from documents table
|
||||
"title": doc['title'],
|
||||
"content_preview": doc['content'][:200] + "..." if len(doc['content']) > 200 else doc['content'],
|
||||
"source": doc['source'],
|
||||
"similarity": float(similarity)
|
||||
})
|
||||
|
||||
# Generate answer using LLM with retrieved contexts
|
||||
if contexts:
|
||||
context_text = "\n\n---\n\n".join(contexts)
|
||||
|
||||
# Prepare the system message
|
||||
system_message = """
|
||||
You are a helpful assistant that answers questions based on the provided document contexts.
|
||||
If the context doesn't contain relevant information, say so clearly.
|
||||
If the information is incomplete, explain what's missing.
|
||||
Always cite your sources when providing information.
|
||||
Format your answers to be clear and concise.
|
||||
Always answer in formal Bahasa Malaysia.
|
||||
"""
|
||||
|
||||
# Use direct HTTP request to OpenAI API instead of client library
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {OPENAI_API_KEY}"
|
||||
}
|
||||
|
||||
payload = {
|
||||
"model": OPENAI_CHAT_MODEL,
|
||||
"messages": [
|
||||
{"role": "system", "content": system_message},
|
||||
{"role": "user", "content": f"Context documents:\n\n{context_text}\n\nBased on these documents, please answer the following query: {query}"}
|
||||
],
|
||||
"temperature": 0.5
|
||||
}
|
||||
|
||||
print(f"Requesting chat completion using model: {OPENAI_CHAT_MODEL}")
|
||||
|
||||
response = requests.post(
|
||||
"https://api.openai.com/v1/chat/completions",
|
||||
headers=headers,
|
||||
json=payload
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
raise Exception(f"Error from OpenAI API: {response.text}")
|
||||
|
||||
result = response.json()
|
||||
answer = result["choices"][0]["message"]["content"]
|
||||
else:
|
||||
answer = "I couldn't find any relevant documents to answer your question."
|
||||
|
||||
# Log the search
|
||||
search_results = {
|
||||
"query": query,
|
||||
"documents": result_docs,
|
||||
"answer": answer
|
||||
}
|
||||
log_search(query, search_results)
|
||||
|
||||
return search_results
|
11
requirements.txt
Normal file
11
requirements.txt
Normal file
@ -0,0 +1,11 @@
|
||||
mysql-connector-python==8.1.0
|
||||
openai==1.10.0
|
||||
numpy==1.24.3
|
||||
python-dotenv==1.0.0
|
||||
langchain==0.0.335
|
||||
streamlit==1.27.2
|
||||
tiktoken==0.5.1
|
||||
fastapi==0.104.1
|
||||
uvicorn==0.24.0
|
||||
pydantic==2.4.2
|
||||
python-multipart==0.0.6
|
87
utils/text_processing.py
Normal file
87
utils/text_processing.py
Normal file
@ -0,0 +1,87 @@
|
||||
import re
|
||||
|
||||
def preprocess_text(text):
|
||||
"""Clean and preprocess text for embedding"""
|
||||
# Convert to lowercase
|
||||
text = text.lower()
|
||||
|
||||
# Remove extra whitespace
|
||||
text = re.sub(r'\s+', ' ', text).strip()
|
||||
|
||||
# Remove special characters (keep alphanumeric, spaces, and basic punctuation)
|
||||
text = re.sub(r'[^\w\s.,?!-]', '', text)
|
||||
|
||||
return text
|
||||
|
||||
def chunk_text(text, max_chunk_size=1000, overlap=100):
|
||||
"""Split text into chunks with overlap for processing long documents"""
|
||||
# Split text into sentences
|
||||
sentences = re.split(r'(?<=[.!?])\s+', text)
|
||||
|
||||
chunks = []
|
||||
current_chunk = []
|
||||
current_size = 0
|
||||
|
||||
for sentence in sentences:
|
||||
sentence_size = len(sentence)
|
||||
|
||||
if current_size + sentence_size <= max_chunk_size:
|
||||
current_chunk.append(sentence)
|
||||
current_size += sentence_size
|
||||
else:
|
||||
# Add the current chunk to the list of chunks
|
||||
if current_chunk:
|
||||
chunks.append(' '.join(current_chunk))
|
||||
|
||||
# Create a new chunk, potentially with overlap
|
||||
if overlap > 0 and current_chunk:
|
||||
# Calculate how many sentences to keep for overlap
|
||||
overlap_size = 0
|
||||
overlap_sentences = []
|
||||
|
||||
for s in reversed(current_chunk):
|
||||
if overlap_size + len(s) <= overlap:
|
||||
overlap_sentences.insert(0, s)
|
||||
overlap_size += len(s)
|
||||
else:
|
||||
break
|
||||
|
||||
current_chunk = overlap_sentences + [sentence]
|
||||
current_size = overlap_size + sentence_size
|
||||
else:
|
||||
current_chunk = [sentence]
|
||||
current_size = sentence_size
|
||||
|
||||
# Add the last chunk if it exists
|
||||
if current_chunk:
|
||||
chunks.append(' '.join(current_chunk))
|
||||
|
||||
return chunks
|
||||
|
||||
def extract_keywords(text, max_keywords=5):
|
||||
"""Extract key terms from text using basic frequency analysis"""
|
||||
# Remove stopwords and extract important terms
|
||||
stopwords = {'a', 'an', 'the', 'and', 'or', 'but', 'if', 'because', 'as', 'what',
|
||||
'when', 'where', 'how', 'who', 'which', 'this', 'that', 'to', 'in',
|
||||
'on', 'for', 'with', 'by', 'about', 'is', 'are', 'was', 'were', 'be',
|
||||
'been', 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'of'}
|
||||
|
||||
# Normalize and tokenize
|
||||
words = re.findall(r'\b[a-z]{3,}\b', text.lower())
|
||||
|
||||
# Remove stopwords
|
||||
words = [word for word in words if word not in stopwords]
|
||||
|
||||
# Count word frequencies
|
||||
word_counts = {}
|
||||
for word in words:
|
||||
if word in word_counts:
|
||||
word_counts[word] += 1
|
||||
else:
|
||||
word_counts[word] = 1
|
||||
|
||||
# Sort by frequency
|
||||
sorted_words = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)
|
||||
|
||||
# Return top keywords
|
||||
return [word for word, count in sorted_words[:max_keywords]]
|
Loading…
x
Reference in New Issue
Block a user