from otree.api import * from numpy import random doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'machine_lawyering' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass # FUNCTIONS def make_field(label): return models.IntegerField( choices=[1,2,3,4,5,6,7], label=label, widget= widgets.RadioSelectHorizontal ) class Player(BasePlayer): # treatment = models.BooleanField() # demographics age = models.IntegerField(choices=[[0,"18-24"],[1,"25-34"],[2,"35-44"],[3,"45-54"],[4,"55-64"],[5, "65-74"],[6,"> 75"]], label="Bitte geben Sie Ihr Alter an") gender = models.IntegerField(choices=[[0, "divers"],[1, "weiblich"], [2, "männlich"],[3, "Keine Angabe"]], widget=widgets.RadioSelectHorizontal, label="Bitte geben Sie Ihr Geschlecht an") occ = models.StringField(choices=[[0,"Studierende"], [1,"Studierende (1. Staatsexamen)"], [2,"Studierende (2. Staatsexamen)"], [3,"Rechtsanwalt:in"], [4,"Richter:in"]], widget=widgets.RadioSelect, label="Bitte geben Sie Ihren Beruf an") exp = models.FloatField(choices=[[0,"< 1 Jahr"],[1,"1-2 Jahre"],[2,"3-4 Jahre"],[3,"5-6 Jahre"],[4,"7-8 Jahre"],[5,"9-10 Jahre"],[6,"> 10 Jahre"]], label="Bitte geben Sie an, wie viele Jahre Erfahrungen Sie im Strafrecht besitzen") ideol = models.IntegerField(choices=[[0, "...unser Rechtssystem zu oft versäumt, die Rechte der Beschuldigten zu schützen."], [1, "...unser Rechtssystem das richtige Gleichgewicht gefunden hat, um die Rechte der Beschuldigten zu schützen."], [2, "...unser Rechtssystem zu oft übertreibt, wenn es um den Schutz der Rechte der Beschuldigten geht."]], widget=widgets.RadioSelect, label='Stimmen Sie zu, dass "bei dem Versuch, das richtige Gleichgewicht zwischen a) dem Schutz der Gesellschaft vor Verbrechen und b) dem Schutz der Rechte von Bürgern, die einer Straftat beschuldigt werden, zu finden, ..."') pers_inno1 = make_field("Wenn ich von einer neuen juristischen Technologie Bescheid wüsste, würde ich nach Möglichkeiten suchen, damit zu experimentieren.") pers_inno2 = make_field("Unter meinen Kollegen bin ich in der Regel der erste, der neue juristische Technologie ausprobiert.") pers_inno3 = make_field("Im Allgemeinen zögere ich davor, neue juristische Technologie auszuprobieren.") pers_inno4 = make_field("Ich experimentiere gerne mit neuer juristischer Technologie.") sentencing_init = models.IntegerField() sentencing_rev = models.IntegerField() responsibility_own = models.IntegerField() recid_init = models.BooleanField(choices=[[True, "Ja"], [False, "Nein"]], label="Denken Sie, dass die beschuldigte Person rückfällig wird, sollte man ihr keine Freiheitsstrafe geben?") # post-task 1 confid1 = make_field("Ich bin zuversichtlich über die Entscheidung, die ich gerade getroffen habe.") confid2 = make_field("Ich bin sicher, dass meine Entscheidung akkurat ist.") confid3 = make_field("Ich halte es für wahrscheinlich, dass meine Entscheidung zu einem Höchstmaß an Gerechtigkeit führen wird.") satis1 = make_field("Ich war mit der Entscheidung in der Strafhöhe zufrieden, die ich während der Strafzumessung getroffen habe.") satis2 = make_field("Ich war mit dem Entscheidungsprozess bei der Strafzumessung zufrieden.") satis3 = make_field("Insgesamt war ich mit meiner Leistung bei dieser Strafzumessung zufrieden.") neg_eval1 = make_field("Ich mache mir Gedanken darüber, was andere über mich sagen.") neg_eval2 = make_field("Ich mache mir Gedanken darüber, was andere über mich denken.") neg_eval3 = make_field("Ich habe das Gefühl, dass andere hinter meinem Rücken über mich reden.") # DSS related fields responsibility_own_rev = models.IntegerField() responsibility_DSS = models.IntegerField() recid_rev = models.BooleanField(choices=[[True, "Ja"], [False, "Nein"]], label="Denken Sie, dass die beschuldigte Person rückfällig wird, sollte man ihr keine Freiheitsstrafe geben?") cog_trust1 = make_field("Das System ist kompetent und effektiv bei der Vorhersage der Rückfallwahrscheinlichkeit.") cog_trust2 = make_field("Das System erfüllt seine Aufgabe, die Rückfallwahrscheinlichkeit vorherzusagen, sehr gut.") cog_trust3 = make_field("Insgesamt ist das System ein fähiges und kompetentes Werkzeug für die Vorhersage der Rückfallwahrscheinlichkeit.") integ_trust1 = make_field("Dieses System gibt unvoreingenommene Empfehlungen.") integ_trust2 = make_field("Dieses System ist ehrlich.") integ_trust3 = make_field("Ich halte dieses System für integer.") emo_trust1 = make_field("Ich fühle mich sicher, wenn ich mich bei meiner Entscheidung auf dieses System verlasse.") emo_trust2 = make_field("Ich fühle mich wohl, wenn ich mich bei meiner Entscheidung auf dieses System verlasse.") emo_trust3 = make_field("Ich fühle mich zufrieden, wenn ich mich bei meiner Entscheidung auf dieses System verlasse.") useful1 = make_field("Die Verwendung des Systems bei meiner Arbeit würde meine Produktivität erhöhen.") useful2 = make_field("Die Verwendung des Systems würde meine Effektivität erhöhen.") useful3 = make_field("Ich würde das System für meine Arbeit nützlich finden.") subj_norm1 = make_field("Kollegen, die mein Verhalten beeinflussen, sind der Meinung, dass ich das System nutzen sollte.") subj_norm2 = make_field("Kollegen, die mir wichtig sind, sind der Meinung, dass ich das System nutzen sollte.") # def creating_session(subsession): # for player in subsession.get_players(): # player.treatment = random.choice([True, False]) # print("Set treatment to ", player.treatment) # PAGES class Intro(Page): form_model = "player" #form_fields = ["q1", "q2", "responsibility_own", "responsibility_DSS"] # @staticmethod # def error_message(player, values): # solutions = dict( # name = "tom", # age = 23 # ) # error_messages = dict() # # for field_name in solutions: # if values[field_name] !=solutions[field_name]: # error_messages[field_name] = "wrong answer" # # return error_messages class PreTask(Page): form_model = "player" form_fields = ["age", "gender", "occ", "exp", "ideol", "pers_inno1", "pers_inno2", "pers_inno3", "pers_inno4"] class Task(Page): form_model = "player" form_fields = ["sentencing_init"] class PostTask(Page): form_model = "player" form_fields = ["confid1", "confid2", "confid3", "satis1", "satis2", "satis3", "neg_eval1", "neg_eval2", "neg_eval3", "responsibility_own", "recid_init"] @staticmethod def vars_for_template(player: Player): visible_fields = ["confid1", "confid2", "confid3", "satis1", "satis2", "satis3", "neg_eval1", "neg_eval2", "neg_eval3"] hidden_fields = ["responsibility_own"] return dict(visible_fields=visible_fields, hidden_fields=hidden_fields) class TreatmentPage(Page): form_model = "player" form_fields = ["sentencing_rev"] @staticmethod def js_vars(player: Player): return dict( sentencing_init=player.sentencing_init, ) class PostTreatmentPage(Page): form_model = "player" form_fields = ["cog_trust1", "cog_trust2", "cog_trust3", "integ_trust1", "integ_trust2", "integ_trust3", "emo_trust1", "emo_trust2", "emo_trust3", "useful1", "useful2", "useful3", "subj_norm1", "subj_norm2", "recid_rev", "responsibility_own_rev", "responsibility_DSS"] class MyPage(Page): pass # TODO: checken ob aktualisierung der seite die angaben vom Slider resettet page_sequence = [ Intro, PreTask, Task, PostTask, TreatmentPage, PostTreatmentPage ]