Skip to content

Commit fcff87a

Browse files
committed
new subfertility
1 parent c0d1b71 commit fcff87a

21 files changed

+730
-0
lines changed

.DS_Store

0 Bytes
Binary file not shown.

subfertility1.2/.DS_Store

6 KB
Binary file not shown.

subfertility1.2/exam1c.html

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>MRCOG Part 3 Exam UI</title>
7+
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/2.1.3/marked.min.js"></script>
8+
<style>
9+
body {
10+
font-family: Arial, sans-serif;
11+
max-width: 800px;
12+
margin: 0 auto;
13+
padding: 20px;
14+
}
15+
#timer {
16+
position: fixed;
17+
top: 0;
18+
left: 0;
19+
right: 0;
20+
background-color: #f8f9fa;
21+
font-size: 24px;
22+
font-weight: bold;
23+
padding: 10px;
24+
text-align: center;
25+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
26+
z-index: 1000;
27+
}
28+
#exam-content {
29+
margin-top: 60px;
30+
}
31+
#task-title, #task-content, #notes {
32+
margin-bottom: 20px;
33+
}
34+
button {
35+
padding: 10px 20px;
36+
font-size: 16px;
37+
}
38+
#task-content {
39+
border: 1px solid #ccc;
40+
padding: 15px;
41+
background-color: #f9f9f9;
42+
}
43+
#notes {
44+
width: 100%;
45+
height: 150px;
46+
resize: vertical;
47+
}
48+
</style>
49+
</head>
50+
<body>
51+
<div id="timer"></div>
52+
<div id="exam-content">
53+
<h1>MRCOG Part 3 Exam UI</h1>
54+
<div id="start-screen">
55+
<button id="start-btn">Start Exam</button>
56+
</div>
57+
<div id="exam-screen" style="display: none;">
58+
<div id="task-title"></div>
59+
<div id="task-content"></div>
60+
<textarea id="notes" placeholder="Type your notes here..."></textarea>
61+
</div>
62+
</div>
63+
64+
<script>
65+
const startBtn = document.getElementById('start-btn');
66+
const startScreen = document.getElementById('start-screen');
67+
const examScreen = document.getElementById('exam-screen');
68+
const timerDisplay = document.getElementById('timer');
69+
const taskTitleDisplay = document.getElementById('task-title');
70+
const taskContentDisplay = document.getElementById('task-content');
71+
const notesArea = document.getElementById('notes');
72+
73+
let tasks = [];
74+
let currentTask = 0;
75+
let timer;
76+
let timeLeft;
77+
78+
startBtn.addEventListener('click', startExam);
79+
80+
function loadTasks() {
81+
return fetch('mrcog-exam-tasks.json')
82+
.then(response => response.json())
83+
.then(data => {
84+
tasks = data.tasks;
85+
})
86+
.catch(error => console.error('Error loading tasks:', error));
87+
}
88+
89+
function startExam() {
90+
loadTasks().then(() => {
91+
startScreen.style.display = 'none';
92+
examScreen.style.display = 'block';
93+
nextTask();
94+
});
95+
}
96+
97+
function startTimer(seconds, label) {
98+
clearInterval(timer);
99+
timeLeft = seconds;
100+
updateTimerDisplay(label);
101+
102+
timer = setInterval(() => {
103+
timeLeft--;
104+
updateTimerDisplay(label);
105+
106+
if (timeLeft <= 0) {
107+
clearInterval(timer);
108+
if (label === 'Reading Time') {
109+
startTimer(600, 'Task Time');
110+
} else {
111+
nextTask();
112+
}
113+
}
114+
}, 1000);
115+
}
116+
117+
function updateTimerDisplay(label) {
118+
const minutes = Math.floor(timeLeft / 60);
119+
const seconds = timeLeft % 60;
120+
timerDisplay.textContent = `${label}: ${minutes}:${seconds.toString().padStart(2, '0')}`;
121+
}
122+
123+
function showTask() {
124+
const task = tasks[currentTask];
125+
taskTitleDisplay.textContent = task.title;
126+
127+
fetch(task.file)
128+
.then(response => response.text())
129+
.then(markdown => {
130+
taskContentDisplay.innerHTML = marked.parse(markdown);
131+
})
132+
.catch(error => console.error('Error loading task content:', error));
133+
134+
notesArea.value = ''; // Clear notes for new task
135+
}
136+
137+
function nextTask() {
138+
if (currentTask < tasks.length) {
139+
showTask();
140+
startTimer(120, 'Reading Time');
141+
} else {
142+
endExam();
143+
}
144+
currentTask++;
145+
}
146+
147+
function endExam() {
148+
examScreen.innerHTML = '<h2>Exam Completed</h2><p>Thank you for taking the MRCOG Part 3 Exam.</p>';
149+
}
150+
</script>
151+
</body>
152+
</html>

subfertility1.2/exam1e.html

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Examiner UI</title>
7+
<style>
8+
body, html {
9+
margin: 0;
10+
padding: 0;
11+
height: 100%;
12+
width: 100%;
13+
font-family: Arial, sans-serif;
14+
}
15+
.container {
16+
display: flex;
17+
flex-direction: column;
18+
height: 100%;
19+
}
20+
h1 {
21+
text-align: center;
22+
padding: 20px;
23+
margin: 0;
24+
background-color: #f0f0f0;
25+
}
26+
.form-container {
27+
flex: 1;
28+
display: flex;
29+
justify-content: center;
30+
align-items: center;
31+
padding: 20px;
32+
}
33+
iframe {
34+
border: none;
35+
}
36+
</style>
37+
</head>
38+
<body>
39+
<div class="container">
40+
<h1>Examiner UI</h1>
41+
<div class="form-container">
42+
<iframe src="https://docs.google.com/forms/d/e/1FAIpQLSfanB0hUfTwzs00s27lQFTmN8uhy-FFER15ih6Y0_rQtibJLQ/viewform?embedded=true" width="640" height="7589" frameborder="0" marginheight="0" marginwidth="0">Loading…</iframe>
43+
</div>
44+
</div>
45+
</body>
46+
</html>

subfertility1.2/exam1r.html

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>MRCOG Part 3 Exam UI</title>
7+
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/2.0.3/marked.min.js"></script>
8+
<style>
9+
body {
10+
font-family: Arial, sans-serif;
11+
max-width: 800px;
12+
margin: 0 auto;
13+
padding: 20px;
14+
}
15+
#case-number {
16+
font-size: 24px;
17+
font-weight: bold;
18+
text-align: center;
19+
margin-bottom: 20px;
20+
}
21+
#case-content {
22+
border: 1px solid #ccc;
23+
padding: 20px;
24+
margin-bottom: 20px;
25+
}
26+
.navigation {
27+
display: flex;
28+
justify-content: space-between;
29+
}
30+
button {
31+
font-size: 18px;
32+
padding: 10px 20px;
33+
cursor: pointer;
34+
}
35+
</style>
36+
</head>
37+
<body>
38+
<div id="case-number"></div>
39+
<div id="case-content"></div>
40+
<div class="navigation">
41+
<button id="prev-btn">&larr; Previous</button>
42+
<button id="next-btn">Next &rarr;</button>
43+
</div>
44+
45+
<script>
46+
let cases = [];
47+
let currentCase = 0;
48+
49+
// Load exam data from external JSON file
50+
fetch('exam_data.json')
51+
.then(response => response.json())
52+
.then(data => {
53+
cases = data.cases;
54+
loadMarkdownContent();
55+
})
56+
.catch(error => console.error('Error loading exam data:', error));
57+
58+
function loadMarkdownContent() {
59+
const loadPromises = cases.map(caseData =>
60+
fetch(caseData.contentFile)
61+
.then(response => response.text())
62+
.then(content => {
63+
caseData.content = content;
64+
})
65+
);
66+
67+
Promise.all(loadPromises).then(() => {
68+
updateCase();
69+
});
70+
}
71+
72+
function updateCase() {
73+
document.getElementById('case-number').textContent = `Case ${cases[currentCase].number} of ${cases.length}`;
74+
document.getElementById('case-content').innerHTML = marked(cases[currentCase].content);
75+
}
76+
77+
function nextCase() {
78+
if (currentCase < cases.length - 1) {
79+
currentCase++;
80+
updateCase();
81+
}
82+
}
83+
84+
function prevCase() {
85+
if (currentCase > 0) {
86+
currentCase--;
87+
updateCase();
88+
}
89+
}
90+
91+
document.getElementById('next-btn').addEventListener('click', nextCase);
92+
document.getElementById('prev-btn').addEventListener('click', prevCase);
93+
94+
document.addEventListener('keydown', (event) => {
95+
if (event.key === 'ArrowRight') {
96+
nextCase();
97+
} else if (event.key === 'ArrowLeft') {
98+
prevCase();
99+
}
100+
});
101+
</script>
102+
</body>
103+
</html>

subfertility1.2/exam_data.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"cases": [
3+
{
4+
"number": 1,
5+
"contentFile": "mock1/case1.md"
6+
},
7+
{
8+
"number": 2,
9+
"contentFile": "mock1/case2.md"
10+
},
11+
{
12+
"number": 3,
13+
"contentFile": "mock1/case3.md"
14+
},
15+
{
16+
"number": 4,
17+
"contentFile": "mock1/case4.md"
18+
},
19+
{
20+
"number": 5,
21+
"contentFile": "mock1/case5.md"
22+
},
23+
{
24+
"number": 6,
25+
"contentFile": "mock1/case6.md"
26+
},
27+
{
28+
"number": 7,
29+
"contentFile": "mock1/case7.md"
30+
}
31+
32+
]
33+
}

subfertility1.2/mock1/case1.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
### Simulated Patient’s Instructions
2+
3+
You are Mary McNoughton, aged 37 years. You are requesting fertility treatment as a single parent. You married when you were 30 and always wanted at least two children. You conceived within six months of trying with your first pregnancy, but then tragically your husband was killed in a road traffic accident while you were still pregnant, so he never saw his son. You went on to have a normal vaginal delivery and now live with your two-year-old son, Luke. You have no financial problems.
4+
5+
You remain very sad about the loss of your husband but realise that life must go on. In particular, you do not want Luke to be an only child. You and your husband were both from large families; you remain close to both families and meet regularly.
6+
7+
You also have a close circle of friends, including male friends, but realise that your chance of finding a new partner to share life with Luke and yourself is remote and this is not what you want to do. Family and friends are supportive of your desire for another child.
8+
9+
Your general practitioner has suggested donor insemination as a means of conceiving.
10+
11+
You are otherwise fit and well. Your periods started when you were 12 and your cycle has always been reasonably regular, varying from 28 to about 31 days. The only time you have been in hospital was to have your baby.
12+
13+
If not covered by the candidate, you could ask the following questions:
14+
15+
- What are my chances of being accepted for treatment?
16+
- What are my chances of having a child?
17+
- Who will be the legal father?
18+
- What tests will I need?
19+
- Is there a problem finding donors?
20+
- Do I have any alternatives?

subfertility1.2/mock1/case2.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
### Instructions for Role Players
2+
3+
Please see clinical assessment task 16.2 'Instructions for the role players' for background.
4+
5+
- You were upset to learn at your last consultation that your ovaries were not working properly. You do not understand what being a Turner mosaic means and want the doctor to explain this to you. You have never heard of this condition before.
6+
7+
- You have looked up premature menopause on the internet and know that you could use donor eggs via an IVF process to get pregnant. You want to know if you can do this as you are still very keen to start a family—although you are beginning to despair about this.

0 commit comments

Comments
 (0)