from otree.api import * author = 'Alistair Munro, Fitawhidan Nashuha, and Gerald Ezra Charles' doc = """ Post-Session Survey (bilingual: English / Indonesian). Language is chosen from the SESSION CONFIG key 'language' ('en' or 'id'), the same source used by the coin-flip game app, so the entire session runs in one language. Each field's choices are returned by a method that branches on the language; no runtime mutation of class-level field objects. """ class C(BaseConstants): NAME_IN_URL = 'f_Post_Game_Survey' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def get_language(player): return player.session.config.get('language', 'en') == 'en' class Player(BasePlayer): # ----------------------------- Demographics --------------------------- def education_choices(player): if get_language(player): return [ ['1', 'Primary School'], ['2', 'Junior High School'], ['3', 'Senior High School / Vocational High School'], ['4', 'Vocational School / Diploma (D1/D2/D3)'], ['5', "Bachelor's Degree (S1 / D4)"], ['6', "Master's Degree (S2)"], ['7', 'Doctoral Degree (S3)'], ['95', 'Do not know / Prefer not to answer'], ['99', 'Never attended school'], ] return [ ['1', 'Sekolah Dasar'], ['2', 'Sekolah Menengah Pertama'], ['3', 'Sekolah Menengah Atas / SMK'], ['4', 'Sekolah Kejuruan / Diploma (D1/D2/D3)'], ['5', 'Sarjana (S1 / D4)'], ['6', 'Magister (S2)'], ['7', 'Doktor (S3)'], ['95', 'Tidak tahu / Tidak ingin menjawab'], ['99', 'Tidak pernah bersekolah'], ] education = models.StringField( label='', choices=education_choices, widget=widgets.RadioSelect ) HH_Number = models.IntegerField(label='') HH_5yo = models.IntegerField(min=0, label='') def HH_Decision_Maker_choices(player): if get_language(player): return [ ['Me', 'Myself'], ['Spouse', 'My spouse'], ['Father', 'My father'], ['Mother', 'My mother'], ['Sister', 'My sister'], ['Brother', 'My brother'], ['Grandfather', 'My grandfather'], ['Grandmother', 'My grandmother'], ['Uncle', 'My uncle'], ['Aunt', 'My aunt'], ['Others', 'Others'], ] return [ ['Me', 'Saya sendiri'], ['Spouse', 'Pasangan saya'], ['Father', 'Ayah saya'], ['Mother', 'Ibu saya'], ['Sister', 'Saudara perempuan saya'], ['Brother', 'Saudara laki-laki saya'], ['Grandfather', 'Kakek saya'], ['Grandmother', 'Nenek saya'], ['Uncle', 'Paman saya'], ['Aunt', 'Bibi saya'], ['Others', 'Lainnya'], ] HH_Decision_Maker = models.StringField( label='', choices=HH_Decision_Maker_choices, widget=widgets.RadioSelect ) def Religion_choices(player): if get_language(player): return [ ['Islam', 'Islam'], ['Catholic', 'Catholic'], ['Christian', 'Christian'], ['Hindu', 'Hindu'], ['Buddha', 'Buddhism'], ['Konghucu/Confucius', 'Confucianism'], ['Others', 'Others'], ] return [ ['Islam', 'Islam'], ['Catholic', 'Katolik'], ['Christian', 'Kristen'], ['Hindu', 'Hindu'], ['Buddha', 'Buddha'], ['Konghucu/Confucius', 'Konghucu'], ['Others', 'Lainnya'], ] Religion = models.StringField( label='', choices=Religion_choices, widget=widgets.RadioSelect ) # --------------------------- Smoking / Alcohol ------------------------- def Smoke_Cigarettes_choices(player): if get_language(player): return [[True, 'Yes, I smoke'], [False, 'No, I do not smoke']] return [[True, 'Ya, saya merokok'], [False, 'Tidak, saya tidak merokok']] Smoke_Cigarettes = models.BooleanField( label='', choices=Smoke_Cigarettes_choices, widget=widgets.RadioSelect ) def Smoke_Ecig_choices(player): if get_language(player): return [[True, 'Yes'], [False, 'No']] return [[True, 'Ya'], [False, 'Tidak']] Smoke_Ecig = models.BooleanField( label='', choices=Smoke_Ecig_choices, widget=widgets.RadioSelect ) def Smoke_Chew_choices(player): if get_language(player): return [[True, 'Yes'], [False, 'No']] return [[True, 'Ya'], [False, 'Tidak']] Smoke_Chew = models.BooleanField( label='', choices=Smoke_Chew_choices, widget=widgets.RadioSelect ) def Smoke_Hookah_choices(player): if get_language(player): return [[True, 'Yes'], [False, 'No']] return [[True, 'Ya'], [False, 'Tidak']] Smoke_Hookah = models.BooleanField( label='', choices=Smoke_Hookah_choices, widget=widgets.RadioSelect ) def Drink_Alcohol_choices(player): if get_language(player): return [ ['No', 'No, I do not consume alcohol'], ['Yes', 'Yes, I consume alcohol'], ['Used to', 'I used to consume alcohol but no longer do'], ] return [ ['No', 'Tidak, saya tidak mengonsumsi alkohol'], ['Yes', 'Ya, saya mengonsumsi alkohol'], ['Used to', 'Saya dulu mengonsumsi alkohol tetapi sekarang tidak'], ] Drink_Alcohol = models.StringField( label='', choices=Drink_Alcohol_choices, widget=widgets.RadioSelect ) # ------------------------------ Debt Profile -------------------------- def Debt_A_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_A = models.StringField( label='', choices=Debt_A_choices, widget=widgets.RadioSelect ) def Debt_B_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_B = models.StringField( label='', choices=Debt_B_choices, widget=widgets.RadioSelect ) def Debt_Online_Past_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Online_Past = models.StringField( label='', choices=Debt_Online_Past_choices, widget=widgets.RadioSelect ) def Debt_Paylater_Credit_Past_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Paylater_Credit_Past = models.StringField( label='', choices=Debt_Paylater_Credit_Past_choices, widget=widgets.RadioSelect ) def Debt_Family_Past_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Family_Past = models.StringField( label='', choices=Debt_Family_Past_choices, widget=widgets.RadioSelect ) def Debt_Online_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Online = models.StringField( label='', choices=Debt_Online_choices, widget=widgets.RadioSelect ) def Debt_Paylater_Credit_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Paylater_Credit = models.StringField( label='', choices=Debt_Paylater_Credit_choices, widget=widgets.RadioSelect ) def Debt_Family_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Family = models.StringField( label='', choices=Debt_Family_choices, widget=widgets.RadioSelect ) def Debt_Friend_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Friend = models.StringField( label='', choices=Debt_Friend_choices, widget=widgets.RadioSelect ) def Debt_Private_Lender_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Private_Lender = models.StringField( label='', choices=Debt_Private_Lender_choices, widget=widgets.RadioSelect ) def Debt_Health_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Health = models.StringField( label='', choices=Debt_Health_choices, widget=widgets.RadioSelect ) def Debt_Food_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Food = models.StringField( label='', choices=Debt_Food_choices, widget=widgets.RadioSelect ) def Debt_Capital_choices(player): if get_language(player): return [['Yes', 'Yes'], ['No', 'No'], ['Refused', 'I prefer not to answer']] return [['Yes', 'Ya'], ['No', 'Tidak'], ['Refused', 'Saya menolak menjawab']] Debt_Capital = models.StringField( label='', choices=Debt_Capital_choices, widget=widgets.RadioSelect ) def Desperation_Finance_choices(player): if get_language(player): return [ ['True', 'Yes, I feel financially pressured'], ['False', 'No, I do not feel financially pressured'], ['Refused', 'I prefer not to answer'], ] return [ ['True', 'Ya, saya merasa terdesak secara finansial'], ['False', 'Tidak, saya tidak merasa terdesak secara finansial'], ['Refused', 'Saya menolak menjawab'], ] Desperation_Finance = models.StringField( label='', choices=Desperation_Finance_choices, widget=widgets.RadioSelect ) def Quick_Money_choices(player): if get_language(player): return [ ['Yes', 'Yes'], ['No', 'No'], ['Likely', 'Not sure, but likely'], ['Unlikely', 'Not sure, but unlikely'], ['Refused', 'I prefer not to answer'], ] return [ ['Yes', 'Ya'], ['No', 'Tidak'], ['Likely', 'Saya tidak yakin, tetapi kemungkinan akan melakukannya'], ['Unlikely', 'Saya tidak yakin, tetapi kemungkinan tidak akan melakukannya'], ['Refused', 'Saya menolak menjawab'], ] Quick_Money = models.StringField( label='', choices=Quick_Money_choices, widget=widgets.RadioSelect ) # --------------------- World Bank Financial Literacy ------------------ # NOTE: validated instrument — confirm the official Indonesian wording. def WB_FinLit_1_choices(player): if get_language(player): return [ ['1', 'I have no knowledge and skills'], ['2', 'My knowledge and skills are inadequate'], ['3', 'My knowledge and skills are sufficient'], ['4', 'My knowledge and skills are good'], ['5', 'My knowledge and skills are very good'], ['99', 'I do not know'], ] return [ ['1', 'Saya tidak memiliki pengetahuan dan keterampilan'], ['2', 'Pengetahuan dan keterampilan saya kurang memadai'], ['3', 'Pengetahuan dan keterampilan saya cukup'], ['4', 'Pengetahuan dan keterampilan saya baik'], ['5', 'Pengetahuan dan keterampilan saya sangat baik'], ['99', 'Saya tidak tahu'], ] WB_FinLit_1 = models.StringField( label='', choices=WB_FinLit_1_choices, widget=widgets.RadioSelect ) def WB_FinLit_2_choices(player): if get_language(player): return [ ['1', 'More than now'], ['2', 'The same as now'], ['3', 'Less than now'], ['99', 'I do not know'], ] return [ ['1', 'Lebih banyak dari sekarang'], ['2', 'Sama seperti sekarang'], ['3', 'Lebih sedikit dari sekarang'], ['99', 'Saya tidak tahu'], ] WB_FinLit_2 = models.StringField( label='', choices=WB_FinLit_2_choices, widget=widgets.RadioSelect ) def WB_FinLit_3_choices(player): if get_language(player): return [ ['1', 'More than Rp12,000,000'], ['2', 'Exactly Rp12,000,000'], ['3', 'Less than Rp12,000,000'], ['99', 'I do not know'], ] return [ ['1', 'Lebih dari Rp12.000.000'], ['2', 'Tepat Rp12.000.000'], ['3', 'Kurang dari Rp12.000.000'], ['99', 'Saya tidak tahu'], ] WB_FinLit_3 = models.StringField( label='', choices=WB_FinLit_3_choices, widget=widgets.RadioSelect ) def WB_FinLit_4_choices(player): if get_language(player): return [ ['1', 'Rp150,000 discount'], ['2', 'Both are the same'], ['3', '10% discount'], ['99', 'I do not know'], ] return [ ['1', 'Diskon Rp150.000'], ['2', 'Keduanya sama'], ['3', 'Diskon 10%'], ['99', 'Saya tidak tahu'], ] WB_FinLit_4 = models.StringField( label='', choices=WB_FinLit_4_choices, widget=widgets.RadioSelect ) def WB_FinLit_5_choices(player): if get_language(player): return [ ['1', '3%'], ['2', '6%'], ['3', '9%'], ['4', '12%'], ['99', 'I do not know'], ] return [ ['1', '3%'], ['2', '6%'], ['3', '9%'], ['4', '12%'], ['99', 'Saya Tidak tahu'], ] WB_FinLit_5 = models.StringField( label='', choices=WB_FinLit_5_choices, widget=widgets.RadioSelect ) # ----------------------- OECD Financial Literacy ---------------------- def OECD_FinLit_1_choices(player): if get_language(player): return [ ['1', 'More than now'], ['2', 'The same'], ['3', 'Less'], ['4', 'Depends on goods'], ['99', 'I do not know'], ] return [ ['1', 'Lebih banyak dari sekarang'], ['2', 'Sama seperti sekarang'], ['3', 'Lebih sedikit dari sekarang'], ['4', 'Tergantung pada jenis barang'], ['99', 'Saya tidak tahu'], ] OECD_FinLit_1 = models.StringField( label='', choices=OECD_FinLit_1_choices, widget=widgets.RadioSelect ) def OECD_FinLit_2_choices(player): if get_language(player): return [ ['1', 'Rp1,200,000'], ['2', 'Rp1,020,000'], ['3', 'Rp1,100,000'], ['99', 'I do not know'], ] return [ ['1', 'Rp1.200.000'], ['2', 'Rp1.020.000'], ['3', 'Rp1.100.000'], ['99', 'Saya tidak tahu'], ] OECD_FinLit_2 = models.StringField( label='', choices=OECD_FinLit_2_choices, widget=widgets.RadioSelect ) def OECD_FinLit_3_choices(player): if get_language(player): return [ ['1', 'Rp1,200,000'], ['2', 'Rp1,020,000'], ['3', 'Rp1,100,000'], ['99', 'I do not know'], ] return [ ['1', 'Rp1,200,000'], ['2', 'Rp1,020,000'], ['3', 'Rp1,100,000'], ['99', 'Saya tidak tahu'], ] OECD_FinLit_3 = models.StringField( label='', choices=OECD_FinLit_3_choices, widget=widgets.RadioSelect ) def OECD_FinLit_4_choices(player): if get_language(player): return [['True', 'True'], ['False', 'False'], ['99', 'I do not know']] return [['True', 'Benar'], ['False', 'Salah'], ['99', 'Saya tidak tahu']] OECD_FinLit_4 = models.StringField( label='', choices=OECD_FinLit_4_choices, widget=widgets.RadioSelect ) def OECD_FinLit_5_choices(player): if get_language(player): return [['True', 'True'], ['False', 'False'], ['99', 'I do not know']] return [['True', 'Benar'], ['False', 'Salah'], ['99', 'Saya tidak tahu']] OECD_FinLit_5 = models.StringField( label='', choices=OECD_FinLit_5_choices, widget=widgets.RadioSelect ) # OECD_FinLit_6 — the only field that carries an inline (bilingual) label. def OECD_FinLit_6_label(player): if get_language(player): return ('True or False: Risk in stock investments can be reduced ' 'through diversification.') return ('Benar atau Salah: Risiko investasi saham dapat dikurangi ' 'melalui diversifikasi.') def OECD_FinLit_6_choices(player): if get_language(player): return [['True', 'True'], ['False', 'False'], ['99', 'I do not know']] return [['True', 'Benar'], ['False', 'Salah'], ['99', 'Saya tidak tahu']] OECD_FinLit_6 = models.StringField( label='', choices=OECD_FinLit_6_choices, widget=widgets.RadioSelect ) OECD_FinLit_7 = models.IntegerField(min=0, max=10_000_000, label='') # -------------------- OECD Additional Literacy Measures --------------- OECD_Division = models.IntegerField(min=0, max=10_000_000, label='') def OECD_Time_Value_choices(player): if get_language(player): return [ ['1', 'More goods'], ['2', 'Almost the same amount'], ['3', 'Less goods'], ['4', 'Depends on the type of goods'], ['5', 'Depends on price changes'], ['99', 'I do not know'], ] return [ ['1', 'Lebih banyak barang'], ['2', 'Hampir sama'], ['3', 'Lebih sedikit barang'], ['4', 'Tergantung jenis barang'], ['5', 'Tergantung perubahan harga'], ['99', 'Saya tidak tahu'], ] OECD_Time_Value = models.StringField( label='', choices=OECD_Time_Value_choices, widget=widgets.RadioSelect ) def OECD_Diversification_choices(player): if get_language(player): return [['True', 'True'], ['False', 'False'], ['99', 'I do not know']] return [['True', 'Benar'], ['False', 'Salah'], ['99', 'Saya tidak tahu']] OECD_Diversification = models.StringField( label='', choices=OECD_Diversification_choices, widget=widgets.RadioSelect ) def OECD_RisknReturn_choices(player): if get_language(player): return [['True', 'True'], ['False', 'False'], ['99', 'I do not know']] return [['True', 'Benar'], ['False', 'Salah'], ['99', 'Saya tidak tahu']] OECD_RisknReturn = models.StringField( label='', choices=OECD_RisknReturn_choices, widget=widgets.RadioSelect ) # ---- DROPPED in the 2nd file — confirm whether to keep ---- OECD_Interest = models.IntegerField(min=0, max=10_000_000, label='') def OECD_Interest_Compound_choices(player): if get_language(player): return [ ['1', 'More than Rp110,000'], ['2', 'Exactly Rp110,000'], ['3', 'Less than Rp110,000'], ['4', 'Cannot be determined'], ['99', 'I do not know'], ] return [ ['1', 'Lebih dari Rp110,000'], ['2', 'Rp110,000'], ['3', 'Kurang dari Rp110,000'], ['4', 'Tidak dapat ditentukan'], ['99', 'Saya tidak tahu'], ] OECD_Interest_Compound = models.StringField( label='', choices=OECD_Interest_Compound_choices, widget=widgets.RadioSelect ) OECD_Interest_Loan = models.IntegerField(min=0, max=10_000_000, label='') def OECD_Diversification2_choices(player): if get_language(player): return [['True', 'True'], ['False', 'False'], ['99', 'I do not know']] return [['True', 'Benar'], ['False', 'Salah'], ['99', 'Saya tidak tahu']] OECD_Diversification2 = models.StringField( label='', choices=OECD_Diversification2_choices, widget=widgets.RadioSelect ) # ------------------------- General Risk Preference -------------------- def General_Risk_Q_choices(player): if get_language(player): return [ ['1', 'Very unwilling'], ['2', 'Unwilling'], ['3', 'Somewhat willing'], ['4', 'Willing'], ['5', 'Very willing'], ] return [ ['1', 'Sangat tidak bersedia'], ['2', 'Tidak bersedia'], ['3', 'Cukup bersedia'], ['4', 'Bersedia'], ['5', 'Sangat bersedia'], ] General_Risk_Q = models.StringField( label='', choices=General_Risk_Q_choices, widget=widgets.RadioSelect )