Models

app.models.get_missing_data_keys(data: dict[str, Any]) dict[str, bool][source]

Get a dictionary indicating whether each key in the input dictionary has missing data (empty or None).

Parameters:

data – The input dictionary to check for missing data.

Returns:

A dictionary with the same keys as the input dictionary, where the values are True if the corresponding value in the input dictionary is empty or None, and False otherwise.

class app.models.ActiveRecordMixin[source]
classmethod filter_by(session: Session, field: str, value: Any) Query[source]

Filter a model based on a field’s value.

Parameters:
  • session – The database session.

  • value – The field.

  • field – The field’s value.

Returns:

The query.

classmethod first_by(session: Session, field: str, value: Any) Self | None[source]

Get an existing instance based on a field’s value.

Parameters:
  • session – The database session.

  • value – The field.

  • field – The field’s value.

Returns:

The existing instance if found, otherwise None.

classmethod get(session: Session, id: int) Self[source]

Get an existing instance by its ID. Raise an exception if not found.

Parameters:
  • session – The database session.

  • id – The ID.

Returns:

The existing instance if found.

classmethod create(session: Session, **data: Any) Self[source]

Insert a new instance into the database.

If the model has a missing_data field, indicate which fields are missing in data.

Parameters:
  • session – The database session.

  • data – The initial instance data.

Returns:

The inserted instance.

update(session: Session, **data: Any) Self[source]

Update an existing instance in the database.

Parameters:
  • session – The database session.

  • data – The updated instance data.

Returns:

The updated instance.

class app.models.Application(*, uuid: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=True, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], primary_email: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', award_borrower_identifier: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', amount_requested: ~typing.Annotated[~decimal.Decimal | None, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], currency: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = 'COP', repayment_years: int | None, repayment_months: int | None, payment_start_date: ~datetime.datetime | None, calculator_data: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, status: ~typing.Annotated[~app.models.ApplicationStatus, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = ApplicationStatus.PENDING, pending_documents: ~typing.Annotated[bool, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = False, pending_email_confirmation: ~typing.Annotated[bool, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = False, expired_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('expired_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], borrower_declined_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('borrower_declined_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], borrower_declined_preferences_data: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, borrower_declined_data: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, borrower_accepted_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('borrower_accepted_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], borrower_credit_product_selected_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('borrower_credit_product_selected_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], borrower_submitted_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('borrower_submitted_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], borrower_accessed_external_onboarding_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('borrower_accessed_external_onboarding_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], lender_started_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('lender_started_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], information_requested_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('information_requested_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], lender_rejected_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('lender_rejected_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], lender_rejected_data: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, lender_approved_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('lender_approved_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], lender_approved_data: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, secop_data_verification: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, disbursed_final_amount: ~typing.Annotated[~decimal.Decimal | None, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], completed_in_days: int | None, overdued_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('overdued_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], application_lapsed_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('application_lapsed_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], archived_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('archived_at', DateTime(timezone=True), table=<application>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], award_id: ~typing.Annotated[int, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=award.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], borrower_id: ~typing.Annotated[int, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=borrower.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], lender_id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=lender.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], credit_product_id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=credit_product.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<application>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a77186550; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 233591), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<application>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a77210550; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 233667), confirmation_email_token: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None)[source]
classmethod unarchived(session: Session) Query[source]

Return a query for unarchived applications.

classmethod pending_introduction_reminder(session: Session) Query[source]

Return a query for PENDING applications whose expiration date is within reminder_days_before_expiration days from now, and whose borrower hasn’t already received a reminder to accept and may receive Credere invitations.

classmethod pending_submission_reminder(session: Session) Query[source]

Return a query for ACCEPTED applications whose lapsed date is within reminder_days_before_lapsed days from now, and whose borrower hasn’t already received a reminder to submit.

classmethod pending_external_onboarding_reminder(session: Session) Query[source]

Return a query for SUBMITTED applications in which the lender uses external onboarding, whose lapsed date is within reminder_days_before_lapsed_for_external_onboarding days from now, and whose borrower hasn’t already received a reminder to start external onboarding.

classmethod lapseable(session: Session) Query[source]

Return a query for unarchived() applications that have been waiting for the borrower to respond for days_to_change_to_lapsed days.

classmethod submitted(session: Session) Query[source]

Return query for unarchived() applications that have been submitted to any lender (not one of PENDING, DECLINED, ACCEPTED) and that aren’t LAPSED.

classmethod archivable(session: Session) Query[source]

Return query for unarchived() applications that have been in a final state (DECLINED, REJECTED, APPROVED, LAPSED) for days_to_erase_borrowers_data days.

property tz: tzinfo | None

Return the application’s time zone.

previous_awards(session: Session) list[Award][source]

Return the previous awards to the application’s borrower, in reverse time order by contract start date.

rejected_lenders(session: Session) list[Self][source]

Return the IDs of lenders who rejected applications from the application’s borrower, for the same award.

days_waiting_for_lender(session: Session) int[source]

Return the number of days that the application has been waiting for the lender to respond.

stage_as_rejected(lender_rejected_data: dict[str, Any]) None[source]

Assign fields related to marking the application as REJECTED.

stage_as_approved(disbursed_final_amount: Decimal | None, lender_approved_data: dict[str, Any]) None[source]

Assign fields related to marking the application as COMPLETED.

application_lapsed_at

The time at which the application transitioned to LAPSED.

archived_at

The time at which the application was archived.

award_borrower_identifier

The hashed borrower ID and award ID, for privacy-preserving long-term identification.

borrower_accepted_at

The time at which the application transitioned to ACCEPTED.

borrower_accessed_external_onboarding_at

The time at which the borrower clicked external_onboarding_url.

borrower_credit_product_selected_at

The time at which the borrower most recently selected a credit product.

borrower_declined_at

The time at which the application transitioned to DECLINED.

borrower_declined_data

Whether the borrower declined only this invitation or all invitations.

borrower_declined_preferences_data

The reason(s) for which the borrower declined the invitation.

borrower_submitted_at

The time at which the application transitioned from SUBMITTED.

completed_in_days

The total number of days waiting for the lender.

disbursed_final_amount

The amount of the loan disbursed by the lender.

expired_at

The time at which the application expires.

information_requested_at

The time at which the application transitioned to INFORMATION_REQUESTED.

lender_approved_at

The time at which the application transitioned to APPROVED.

lender_approved_data

The reason(s) for which the application was approved.

lender_rejected_at

The time at which the application transitioned to REJECTED.

lender_rejected_data

The reason(s) for which the application was rejected.

lender_started_at

The time at which the application transitioned to STARTED, from SUBMITTED.

overdued_at

The time at which the application was most recently overdue (reset once approved).

pending_documents

Whether the borrower has confirmed the credit product but not yet submitted the application, or the lender has requested information and the borrower has not yet uploaded documents.

pending_email_confirmation

Whether the borrower has changed the primary email for the application, but hasn’t confirmed it.

primary_email

The email address at which the borrower is contacted.

secop_data_verification

Whether the borrower fields (keys) have been verified (bool values) by the lender.

status

The status of the application.

uuid

The secure identifier for the application, for passwordless login.

class app.models.BorrowerDocument(*, id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, type: ~app.models.BorrowerDocumentType, verified: ~typing.Annotated[bool, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = False, name: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', submitted_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('submitted_at', DateTime(timezone=True), table=<borrower_document>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a7718ea80; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 254561), application_id: ~typing.Annotated[int, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=application.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<borrower_document>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a7718ef30; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 254679), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<borrower_document>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a7708dd30; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 254741), file: bytes)[source]
file: bytes

The content of the document.

name

The filename of the document.

submitted_at

The time at which the document was most recently uploaded by the borrower.

type

The type of document.

verified

Whether the document has been verified by the lender.

class app.models.Lender(*, name: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=True, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', email_group: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', type: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', logo_filename: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', sla_days: int | None, external_onboarding_url: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, status: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', deleted_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('deleted_at', DateTime(timezone=True), table=<lender>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<lender>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a7727ef90; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 195701), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<lender>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a772e5810; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 195909))[source]
status: str

Unused.

deleted_at: datetime | None

Unused.

email_group

An email address of the lender, for sharing with borrowers.

external_onboarding_url

A URL pointing to the lender’s own onboarding system. If set, a custom email is sent to the borrower after the application is submitted, indicating that the process should continue in the lender’s system.

logo_filename

The filename of the logo of the lender, in credere-frontend.

name

The name of the lender.

sla_days

The number of days within which the lender agrees to respond to application changes.

type

The type of the lender, from the LENDER_TYPES enum in credere-frontend. (Unused.)

class app.models.CreditProduct(*, borrower_size: ~app.models.BorrowerSize, borrower_types: ~typing.Annotated[dict[str, bool], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, lower_limit: ~typing.Annotated[~decimal.Decimal, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], upper_limit: ~typing.Annotated[~decimal.Decimal, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], procurement_category_to_exclude: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', type: ~app.models.CreditType, required_document_types: ~typing.Annotated[dict[str, bool], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, interest_rate: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', additional_information: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', other_fees_total_amount: ~typing.Annotated[~decimal.Decimal, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], other_fees_description: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', more_info_url: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', lender_id: ~typing.Annotated[int, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=lender.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<credit_product>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a772e6e90; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 205230), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<credit_product>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a772b8770; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 205347))[source]
borrower_size

The size of the borrower to which this credit product is applicable. (The same credit product can be configured for each applicable borrower size.)

borrower_types

The types of borrower to which this credit product is applicable.

lower_limit

The lower limit for the amount requested, below which this credit product is inapplicable.

procurement_category_to_exclude

A single procurement category, to which this credit product is inapplicable.

required_document_types

The document types that the borrower is prompted to upload.

type

The type of credit product, which mainly controls which descriptive fields are displayed.

upper_limit

The upper limit for the amount requested, above which this credit product is inapplicable.

class app.models.Message(*, id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, type: ~app.models.MessageType, external_message_id: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', body: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', application_id: ~typing.Annotated[int, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=application.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], lender_id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=lender.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<message>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a770a52b0; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 260487), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<message>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a772454a0; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 260563))[source]
type: MessageType

The type of email message.

external_message_id: str

The SES MessageId.

body: str

The body of the email message, if directly provided by a lender.

classmethod application_by_type(message_type: MessageType) Select[source]

Return the IDs of applications that sent messages of the provided type.

class app.models.User(*, id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, type: ~typing.Annotated[~app.models.UserType, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = UserType.FI, language: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = 'es', email: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=True, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], notification_preferences: ~typing.Annotated[dict[str, bool], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, name: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', external_id: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', lender_id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=lender.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<credere_user>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a7715d550; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 267953))[source]
email

The email address with which the user logs in and is contacted.

external_id

The Cognito Username.

language

Unused.

name

The name by which the user is addressed in emails and identified in application action histories.

notification_preferences

The MessageType the user wants to receive notifications about. The supported types are:

type

The authorization group of the user.

class app.models.Borrower(*, id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, borrower_identifier: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=True, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', declined_at: ~typing.Annotated[~datetime.datetime | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('declined_at', DateTime(timezone=True), table=<borrower>), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], legal_name: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', email: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', address: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', legal_identifier: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', type: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', is_msme: ~typing.Annotated[bool, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = True, missing_data: ~typing.Annotated[dict[str, bool], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, size: ~typing.Annotated[~app.models.BorrowerSize, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = BorrowerSize.NOT_INFORMED, sector: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', annual_revenue: ~typing.Annotated[~decimal.Decimal | None, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], currency: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = 'COP', created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<borrower>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a772ba190; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 212623), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<borrower>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a78cff530; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 212715), source_data: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, status: ~typing.Annotated[~app.models.BorrowerStatus, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = BorrowerStatus.ACTIVE)[source]

Most fields are derived from the data source. In terms of application logic, those fields are (or can be) used in emails to the borrower, like the legal_identifier and legal_name.

source_data: dict[str, Any]
status: BorrowerStatus

The status of the borrower.

applications: Mapped[list[Application]]
awards: Mapped[list[Award]]
address

The registered address of the borrower in the data source.

annual_revenue

The annual revenue of the borrower.

borrower_identifier

The hashed borrower ID, for privacy-preserving long-term identification.

created_at
currency

The currency of the annual revenue of the borrower.

declined_at

The time at which the borrower opted out of Credere entirely.

email

The email address with which the application’s primary_email is initialized.

id
is_msme

Whether the borrower is a MSME in the data source.

legal_identifier

The ID of the borrower in the data source.

legal_name

The name of the borrower in the data source.

missing_data
sector

The industrial sector of the borrower.

size
type

The type of the borrower in the data source.

updated_at
class app.models.Award(*, id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=True, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = None, source_contract_id: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=True, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', title: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', description: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', award_date: ~datetime.datetime | None, award_amount: ~typing.Annotated[~decimal.Decimal, _PydanticGeneralMetadata(max_digits=16, decimal_places=2), ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], award_currency: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = 'COP', contractperiod_startdate: ~datetime.datetime | None, contractperiod_enddate: ~datetime.datetime | None, payment_method: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, buyer_name: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', source_url: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', entity_code: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', contract_status: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', source_last_updated_at: ~datetime.datetime | None, previous: ~typing.Annotated[bool, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = False, procurement_method: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', contracting_process_id: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', procurement_category: ~typing.Annotated[str, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = '', missing_data: ~typing.Annotated[dict[str, bool], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, borrower_id: ~typing.Annotated[int | None, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=borrower.id, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)], source_data_contracts: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, source_data_awards: ~typing.Annotated[dict[str, ~typing.Any], ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=~sqlalchemy.dialects.postgresql.json.JSON, sa_column=PydanticUndefined, sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = <factory>, created_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('created_at', DateTime(timezone=True), table=<award>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x769a771dc490; now>, for_update=False)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 225091), updated_at: ~typing.Annotated[~datetime.datetime, ~sqlmodel.main.FieldInfoMetadata(primary_key=PydanticUndefined, nullable=PydanticUndefined, foreign_key=PydanticUndefined, ondelete=PydanticUndefined, unique=PydanticUndefined, index=PydanticUndefined, sa_type=PydanticUndefined, sa_column=Column('updated_at', DateTime(timezone=True), table=<award>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x769a771dc7c0; now>)), sa_column_args=PydanticUndefined, sa_column_kwargs=PydanticUndefined)] = datetime.datetime(2026, 6, 23, 20, 4, 23, 225182))[source]

All fields, other than relationships and timestamps, are derived from the data source. In terms of application logic, the fields are (or can be) used in emails to identify the award, like the buyer_name and title.

source_data_contracts: dict[str, Any]
source_data_awards: dict[str, Any]
applications: Mapped[list[Application]]
borrower: Mapped[Borrower | None]
created_at: datetime
updated_at: datetime
classmethod last_updated(session: Session) datetime | None[source]

Return the most recent source_last_updated_at value.

award_amount
award_currency
award_date
borrower_id
buyer_name
contract_status
contracting_process_id
contractperiod_enddate
contractperiod_startdate
description
entity_code
id
missing_data
payment_method
previous

Whether this award was retrieved when the invitation was accepted (to display to the lender, as context), or is related to an archived application (again, to display in future applications).

procurement_category
procurement_method
source_contract_id

The ID of the award (contract) in the data source.

source_last_updated_at

The time at which the award was last updated in the data source.

source_url

The human-readable web page of the award.

title