139 lines
5.8 KiB
Python
139 lines
5.8 KiB
Python
"""
|
|
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
|
|
)
|