Skip to main content
import uuid

from corsa_sdk import CorsaClient
from corsa_sdk.api.clients.create_individual_client import (
    _get_kwargs as create_client_kwargs,
)
from corsa_sdk.api.alerts.create_alert import _get_kwargs as create_alert_kwargs
from corsa_sdk.api.cases.create_case import _get_kwargs as create_case_kwargs
from corsa_sdk.api.cases.associate_case_with_alerts import (
    _get_kwargs as assoc_case_alerts_kwargs,
)
from corsa_sdk.models.create_individual_client_dto import CreateIndividualClientDto
from corsa_sdk.models.individual_client_general_information_dto import (
    IndividualClientGeneralInformationDto,
)
from corsa_sdk.models.create_alert_dto import CreateAlertDto
from corsa_sdk.models.create_alert_dto_category import CreateAlertDtoCategory
from corsa_sdk.models.create_alert_dto_priority import CreateAlertDtoPriority
from corsa_sdk.models.create_alert_dto_status import CreateAlertDtoStatus
from corsa_sdk.models.create_case_dto import CreateCaseDto
from corsa_sdk.models.create_case_dto_category import CreateCaseDtoCategory
from corsa_sdk.models.create_case_dto_priority import CreateCaseDtoPriority
from corsa_sdk.models.create_case_dto_status import CreateCaseDtoStatus


def main() -> None:
    client = CorsaClient(
        base_url="https://api.corsa.finance",
        token="your-api-token",
    )
    http = client.raw_client.get_httpx_client()
    ref = uuid.uuid4().hex[:12]

    # 1. Create an individual client
    resp = http.request(
        **create_client_kwargs(
            body=CreateIndividualClientDto(
                reference_id=f"py-example-{ref}",
                general=IndividualClientGeneralInformationDto(
                    first_name="Jane",
                    last_name="Doe",
                    date_of_birth="1990-05-20",
                    citizenship="US",
                ),
                tags=["sdk-example"],
            )
        )
    )
    individual = resp.json()
    print(f"Created client: {individual['id']}")

    # 2. Create an alert linked to the client
    resp = http.request(
        **create_alert_kwargs(
            body=CreateAlertDto(
                category=CreateAlertDtoCategory.TRANSACTION_MONITORING,
                description="Unusual transfer pattern detected",
                priority=CreateAlertDtoPriority.MEDIUM,
                status=CreateAlertDtoStatus.NEW,
                reference_id=f"py-alert-{ref}",
                associated_client_ids=[individual["id"]],
            )
        )
    )
    alert = resp.json()
    print(f"Created alert:  {alert['id']}")

    # 3. Create a case and associate it with the alert
    resp = http.request(
        **create_case_kwargs(
            body=CreateCaseDto(
                priority=CreateCaseDtoPriority.MEDIUM,
                category=CreateCaseDtoCategory.TRANSACTION_MONITORING,
                reviewers_ids=[],
                status=CreateCaseDtoStatus.NEW,
                description="Investigation into unusual transfer pattern",
                reference_id=f"py-case-{ref}",
            )
        )
    )
    case = resp.json()
    print(f"Created case:   {case['id']}")

    resp = http.request(
        **assoc_case_alerts_kwargs(case_id=case["id"], body=[alert["id"]])
    )
    print(f"Associated alert {alert['id']} with case {case['id']}")

    client.close()


if __name__ == "__main__":
    main()