""" Database Models for OCR Application """ from datetime import datetime from database import db class KTPRecord(db.Model): """Model untuk menyimpan data KTP hasil OCR""" __tablename__ = 'ktp_records' id = db.Column(db.Integer, primary_key=True, autoincrement=True) nik = db.Column(db.String(16), unique=True, nullable=True, index=True) nama = db.Column(db.String(100), nullable=True) tempat_lahir = db.Column(db.String(50), nullable=True) tanggal_lahir = db.Column(db.String(20), nullable=True) jenis_kelamin = db.Column(db.String(20), nullable=True) gol_darah = db.Column(db.String(5), nullable=True) alamat = db.Column(db.Text, nullable=True) rt_rw = db.Column(db.String(10), nullable=True) kel_desa = db.Column(db.String(50), nullable=True) kecamatan = db.Column(db.String(50), nullable=True) kabupaten_kota = db.Column(db.String(50), nullable=True) provinsi = db.Column(db.String(50), nullable=True) agama = db.Column(db.String(20), nullable=True) status_perkawinan = db.Column(db.String(30), nullable=True) pekerjaan = db.Column(db.String(50), nullable=True) kewarganegaraan = db.Column(db.String(10), nullable=True) berlaku_hingga = db.Column(db.String(20), nullable=True) image_path = db.Column(db.String(255), nullable=True) # Path to saved KTP image raw_text = db.Column(db.Text, nullable=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) def to_dict(self): """Convert model to dictionary""" return { 'id': self.id, 'nik': self.nik, 'nama': self.nama, 'tempat_lahir': self.tempat_lahir, 'tanggal_lahir': self.tanggal_lahir, 'jenis_kelamin': self.jenis_kelamin, 'gol_darah': self.gol_darah, 'alamat': self.alamat, 'rt_rw': self.rt_rw, 'kel_desa': self.kel_desa, 'kecamatan': self.kecamatan, 'kabupaten_kota': self.kabupaten_kota, 'provinsi': self.provinsi, 'agama': self.agama, 'status_perkawinan': self.status_perkawinan, 'pekerjaan': self.pekerjaan, 'kewarganegaraan': self.kewarganegaraan, 'berlaku_hingga': self.berlaku_hingga, 'image_path': self.image_path, 'created_at': self.created_at.isoformat() if self.created_at else None, 'updated_at': self.updated_at.isoformat() if self.updated_at else None } @classmethod def from_ocr_data(cls, ocr_data, raw_text=None): """Create KTPRecord from OCR extracted data""" return cls( nik=ocr_data.get('nik'), nama=ocr_data.get('nama'), tempat_lahir=ocr_data.get('tempat_lahir'), tanggal_lahir=ocr_data.get('tanggal_lahir'), jenis_kelamin=ocr_data.get('jenis_kelamin'), gol_darah=ocr_data.get('gol_darah'), alamat=ocr_data.get('alamat'), rt_rw=ocr_data.get('rt_rw'), kel_desa=ocr_data.get('kel_desa'), kecamatan=ocr_data.get('kecamatan'), kabupaten_kota=ocr_data.get('kabupaten_kota'), provinsi=ocr_data.get('provinsi'), agama=ocr_data.get('agama'), status_perkawinan=ocr_data.get('status_perkawinan'), pekerjaan=ocr_data.get('pekerjaan'), kewarganegaraan=ocr_data.get('kewarganegaraan'), berlaku_hingga=ocr_data.get('berlaku_hingga'), raw_text=raw_text ) class KKRecord(db.Model): """Model untuk menyimpan data Kartu Keluarga hasil OCR""" __tablename__ = 'kk_records' id = db.Column(db.Integer, primary_key=True, autoincrement=True) no_kk = db.Column(db.String(16), unique=True, nullable=True, index=True) kepala_keluarga = db.Column(db.String(100), nullable=True) alamat = db.Column(db.Text, nullable=True) rt_rw = db.Column(db.String(10), nullable=True) kel_desa = db.Column(db.String(50), nullable=True) kecamatan = db.Column(db.String(50), nullable=True) kabupaten_kota = db.Column(db.String(50), nullable=True) provinsi = db.Column(db.String(50), nullable=True) kode_pos = db.Column(db.String(10), nullable=True) image_path = db.Column(db.String(255), nullable=True) # Path to saved KK image raw_text = db.Column(db.Text, nullable=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) def to_dict(self): """Convert model to dictionary""" return { 'id': self.id, 'no_kk': self.no_kk, 'kepala_keluarga': self.kepala_keluarga, 'alamat': self.alamat, 'rt_rw': self.rt_rw, 'kel_desa': self.kel_desa, 'kecamatan': self.kecamatan, 'kabupaten_kota': self.kabupaten_kota, 'provinsi': self.provinsi, 'kode_pos': self.kode_pos, 'image_path': self.image_path, 'created_at': self.created_at.isoformat() if self.created_at else None, 'updated_at': self.updated_at.isoformat() if self.updated_at else None } @classmethod def from_ocr_data(cls, ocr_data, raw_text=None): """Create KKRecord from OCR extracted data""" return cls( no_kk=ocr_data.get('no_kk'), kepala_keluarga=ocr_data.get('kepala_keluarga'), alamat=ocr_data.get('alamat'), rt_rw=ocr_data.get('rt_rw'), kel_desa=ocr_data.get('kel_desa'), kecamatan=ocr_data.get('kecamatan'), kabupaten_kota=ocr_data.get('kabupaten_kota'), provinsi=ocr_data.get('provinsi'), kode_pos=ocr_data.get('kode_pos'), raw_text=raw_text )