File size: 5,062 Bytes
80ffa08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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')")