Files
local-ocr/models.py
2025-12-31 01:38:01 +08:00

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
)