from pydantic import BaseModel, Field from typing import List class PersonalDetails(BaseModel): name: str = Field(description="Full name of the applicant") dob: str = Field(description="Date of birth in 'DD Month YYYY' format") nationality: str = Field(description="Nationality") occupation: str = Field(description="Current job title or occupation") passport_number: str = Field(description="Passport number") class GroupMember(BaseModel): name: str relationship: str dob: str occupation: str nationality: str passport_number: str class SchengenVisaData(BaseModel): personal_details: PersonalDetails group_members: List[GroupMember] = Field(default_factory=list) # Trip Details country: str = Field(description="The specific Schengen country embassy (e.g. France, Italy)") main_dest: str = Field(description="Main destination country") other_destinations: str = Field(description="Comma separated list of other countries, if any", default="") purpose: str = Field(description="Purpose of travel (Tourism, Business, Family Visit)") event: str = Field(description="Specific event (e.g. 'holiday', 'business meeting')") trip_highlight: str = Field(description="A short highlight (e.g., 'visiting the Eiffel Tower')") # Dates & Duration start: str = Field(description="Travel start date in 'DD Month YYYY'") end: str = Field(description="Travel end date in 'DD Month YYYY'") duration: str = Field(description="Total duration string (e.g., '10 days and 9 nights')") # Contact & Financial contact_email: str contact_phone: str job_commitment: str = Field(description="Professional sentence about returning to job") financial_status: str = Field(description="Financial standing", default="sound") class JapanVisaData(BaseModel): name: str = Field(description="Full name of the applicant") address: str = Field(description="Current residential address (street, number, unit)") city: str = Field(description="City of residence") postal_code: str = Field(description="Postal code of residence") email: str = Field(description="Applicant's email address") phone: str = Field(description="Applicant's phone number (format: +62...)") class HousewifeStatementData(BaseModel): applicant_name: str = Field(description="Full name of the housewife (applicant)") applicant_dob: str = Field(description="Applicant's Place and Date of Birth (e.g. 'Jakarta, 12 January 1980')") applicant_passport: str = Field(description="Applicant's Passport Number") sponsor_name: str = Field(description="Name of the husband/sponsor") sponsor_bank_details: str = Field(description="Sponsor's Bank Name and Account Number") destination_country: str = Field(description="Country being visited") visa_type: str = Field(description="Type of visa (e.g. 'Tourist', 'Visitor')") visit_end_date: str = Field(description="Date the trip ends") travel_companions: str = Field(description="Who the applicant is traveling with (e.g. 'my husband', 'my family')") letter_location: str = Field(description="City where the letter is signed (usually applicant's residence)") class SponsorshipLetterData(BaseModel): # Sponsor Details sponsor_name: str = Field(description="Full name of the sponsor") sponsor_address: str = Field(description="Sponsor's full address") sponsor_postal_code: str = Field(description="Sponsor's postal code") sponsor_email: str = Field(description="Sponsor's email address") sponsor_contact_number: str = Field(description="Sponsor's phone number") # Applicant Details applicant_name: str = Field(description="Full name of the applicant being sponsored") applicant_dob: str = Field(description="Applicant's Date of Birth (e.g. '12 January 1990')") applicant_passport_no: str = Field(description="Applicant's Passport Number") # Embassy/Visa Details officer_title: str = Field(description="Title of the officer (e.g. 'The Visa Officer')", default="The Visa Officer") embassy_name: str = Field(description="Name of the Embassy (e.g. 'Embassy of United Kingdom')") embassy_address: str = Field(description="Street Address of the Embassy") embassy_city_state_postal: str = Field(description="City, State, and Postal Code of the Embassy") # Visit Details visa_name: str = Field(description="Name of the Visa (e.g. 'Tourist Visa', 'Visitor Visa')") sponsor_relationship: str = Field(description="Relationship to applicant (e.g. 'Father', 'Friend', 'Employer')") visit_reason: str = Field(description="Short reason for visit (e.g. 'tourism', 'attend graduation')") destination_country: str = Field(description="Country being visited") visit_start_date: str = Field(description="Start date of visit") visit_end_date: str = Field(description="End date of visit") visit_purpose_details: str = Field(description="Detailed purpose (e.g. 'to spend summer holidays together')")