diff --git a/app.log b/app.log index 3928bfe..7d86856 100644 --- a/app.log +++ b/app.log @@ -562,3 +562,13 @@ Help: https://docs.oracle.com/error-help/db/ora-00936/ 2025-09-10 11:29:54,827 - INFO - [2025-09-10 11:29:54] Salary detection complete 2025-09-10 11:30:20,979 - INFO - Shutting down Salary Analytics API... +2025-09-10 11:31:18,351 - INFO - Initializing pipeline... +2025-09-10 11:31:18,375 - INFO - [2025-09-10 11:31:18] Detecting salary... +2025-09-10 11:31:18,376 - INFO - Started autonomous salary detection loop. +2025-09-10 11:31:18,405 - INFO - Server running on hostname: 0b21809edf52 +2025-09-10 11:31:18,447 - INFO - Server IP address: 172.25.0.2 +2025-09-10 11:31:18,528 - INFO - Server is accessible at: +2025-09-10 11:31:18,552 - INFO - - http://localhost:8000 +2025-09-10 11:31:18,552 - INFO - - http://127.0.0.1:8000 +2025-09-10 11:31:18,553 - INFO - - http://172.25.0.2:8000 +2025-09-10 11:31:18,554 - INFO - Pipeline initialized successfully diff --git a/app/models/account.py b/app/models/account.py new file mode 100644 index 0000000..2198dd3 --- /dev/null +++ b/app/models/account.py @@ -0,0 +1,19 @@ +from sqlalchemy import Column, Integer, String, Date, Numeric, CHAR +from app.extensions import db + + +class Account(db.Model): + __tablename__ = "accounts" + + customerid = db.Column(db.String(50), primary_key=True) + accountid = db.Column(db.String(11), nullable=False) + registrationdate = db.Column(db.DateTime) + accountcurrencycode = db.Column(db.String(3)) + schemecode = db.Column(db.String(5)) + lastinflowtransactiondate = db.Column(db.DateTime) + accountstatus = db.Column(db.String(50)) + accountstatusdate = db.Column(db.DateTime) + + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/simbrella_customer.py b/app/models/simbrella_customer.py new file mode 100644 index 0000000..d8a6659 --- /dev/null +++ b/app/models/simbrella_customer.py @@ -0,0 +1,37 @@ +from sqlalchemy import Column, Integer, String, Date, Numeric, CHAR +from app.extensions import db + +class SimbrellaCustomer(db.Model): + __tablename__ = "simbrella_customers" + + customerid = db.Column(db.String(500), primary_key=True) + acct_opn_date = db.Column(db.DateTime) + gender = db.Column(db.String(20)) + birth_date = db.Column(db.DateTime) + msisdn = db.Column(db.String(100)) + isbvnvalid = db.Column(db.String(100)) + datebvnvalidated = db.Column(db.DateTime) + iscrmsvalid = db.Column(db.String(100)) + datecrmsvalidated = db.Column(db.DateTime) + iscrcvalid = db.Column(db.String(100)) + datecrcvalidated = db.Column(db.DateTime) + + + def __repr__(self): + return f"" + + + def to_dict(self): + return { + "customerid": self.customerid, + "acct_opn_date": self.acct_opn_date, + "gender": self.gender, + "birth_date": self.birth_date, + "msisdn": self.msisdn, + "isbvnvalid": self.isbvnvalid, + "datebvnvalidated": self.datebvnvalidated, + "iscrmsvalid": self.iscrmsvalid, + "datecrmsvalidated": self.datecrmsvalidated, + "iscrcvalid": self.iscrcvalid, + "datecrcvalidated": self.datecrcvalidated, + } \ No newline at end of file diff --git a/app/models/transaction.py b/app/models/transaction.py new file mode 100644 index 0000000..f5c47ba --- /dev/null +++ b/app/models/transaction.py @@ -0,0 +1,46 @@ +from sqlalchemy import Column, Integer, String, Date, Numeric, CHAR +from app.extensions import db + + +class Transaction(db.Model): + __tablename__ = "transactions" + + tran_id = db.Column(db.String(50), primary_key=True) + cif_id = db.Column(db.String(500)) + foracid = db.Column(db.String(150)) + acid = db.Column(db.String(150)) + tran_date = db.Column(db.DateTime) + value_date = db.Column(db.DateTime) + pstd_date = db.Column(db.DateTime) + tran_sub_type = db.Column(db.String(50)) + part_tran_type = db.Column(db.String(50)) + tran_crncy_code = db.Column(db.String(50)) + tran_amt = db.Column(db.Numeric(38, 0)) + tran_particular = db.Column(db.String(250)) + origination_channel = db.Column(db.String(150)) + reversal_tran_id = db.Column(db.String(50)) + isreversal = db.Column(db.String(50)) + + +def __repr__(self): + return f"" + + +def to_dict(self): + return { + "tran_id": self.tran_id, + "cif_id": self.cif_id, + "foracid": self.foracid, + "acid": self.acid, + "tran_date": self.tran_date, + "value_date": self.value_date, + "pstd_date": self.pstd_date, + "tran_sub_type": self.tran_sub_type, + "part_tran_type": self.part_tran_type, + "tran_crncy_code": self.tran_crncy_code, + "tran_amt": float(self.tran_amt) if self.tran_amt is not None else None, + "tran_particular": self.tran_particular, + "origination_channel": self.origination_channel, + "reversal_tran_id": self.reversal_tran_id, + "isreversal": self.isreversal, + } \ No newline at end of file diff --git a/app/models/transaction_stg.py b/app/models/transaction_stg.py new file mode 100644 index 0000000..1bf02a5 --- /dev/null +++ b/app/models/transaction_stg.py @@ -0,0 +1,46 @@ +from sqlalchemy import Column, Integer, String, Date, Numeric, CHAR +from app.extensions import db + + +class TransactionStg(db.Model): + __tablename__ = "transaction_stg" + + tran_id = db.Column(db.String(50), primary_key=True) + cif_id = db.Column(db.String(500)) + foracid = db.Column(db.String(150)) + acid = db.Column(db.String(150)) + tran_date = db.Column(db.String(50)) # staging table keeps as string + value_date = db.Column(db.String(50)) + pstd_date = db.Column(db.String(50)) + tran_sub_type = db.Column(db.String(50)) + part_tran_type = db.Column(db.String(50)) + tran_crncy_code = db.Column(db.String(50)) + tran_amt = db.Column(db.Numeric(38, 0)) + tran_particular = db.Column(db.String(250)) + origination_channel = db.Column(db.String(150)) + reversal_tran_id = db.Column(db.String(50)) + isreversal = db.Column(db.String(50)) + + + def __repr__(self): + return f"" + + + def to_dict(self): + return { + "tran_id": self.tran_id, + "cif_id": self.cif_id, + "foracid": self.foracid, + "acid": self.acid, + "tran_date": self.tran_date, + "value_date": self.value_date, + "pstd_date": self.pstd_date, + "tran_sub_type": self.tran_sub_type, + "part_tran_type": self.part_tran_type, + "tran_crncy_code": self.tran_crncy_code, + "tran_amt": float(self.tran_amt) if self.tran_amt is not None else None, + "tran_particular": self.tran_particular, + "origination_channel": self.origination_channel, + "reversal_tran_id": self.reversal_tran_id, + "isreversal": self.isreversal, + } \ No newline at end of file