Spaces:
Running
Running
Patient images must be and will always be a full body nude head to toe image.. - Follow Up Deployment
9f6f1d6
verified
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Tulip Colony: Gynecological Chronicles</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
<style> | |
.gradient-bg { | |
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); | |
} | |
.patient-card { | |
transition: all 0.3s ease; | |
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
} | |
.patient-card:hover { | |
transform: translateY(-5px); | |
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); | |
} | |
.vignette { | |
position: relative; | |
} | |
.vignette::after { | |
content: ''; | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
box-shadow: inset 0 0 150px rgba(0, 0, 0, 0.8); | |
pointer-events: none; | |
} | |
.medical-record { | |
background-color: #f8f9fa; | |
border-left: 4px solid #4f46e5; | |
} | |
.fade-in { | |
animation: fadeIn 0.5s ease-in; | |
} | |
@keyframes fadeIn { | |
from { opacity: 0; } | |
to { opacity: 1; } | |
} | |
</style> | |
</head> | |
<body class="gradient-bg min-h-screen"> | |
<div class="container mx-auto px-4 py-8"> | |
<!-- Header Section --> | |
<header class="vignette bg-gray-900 text-white rounded-lg p-6 mb-8 relative overflow-hidden"> | |
<div class="absolute inset-0 bg-[url('https://images.unsplash.com/photo-1534796636912-3b95b3ab5986?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1471&q=80')] bg-cover bg-center opacity-30"></div> | |
<div class="relative z-10 flex flex-col md:flex-row justify-between items-center"> | |
<div> | |
<h1 class="text-3xl md:text-4xl font-bold mb-2">TULIP COLONY</h1> | |
<p class="text-indigo-200">Medical Chronicles of Dr. Tito</p> | |
</div> | |
<div class="mt-4 md:mt-0 flex items-center space-x-4"> | |
<div class="text-right"> | |
<p class="text-sm">Ship Status: <span class="text-red-400 font-bold">RED ALERT</span></p> | |
<p class="text-sm">Current Location: <span class="text-indigo-300">Planet Tulip Orbit</span></p> | |
</div> | |
<div class="bg-indigo-600 rounded-full w-12 h-12 flex items-center justify-center"> | |
<i class="fas fa-user-md text-xl"></i> | |
</div> | |
</div> | |
</div> | |
</header> | |
<!-- Main Game Area --> | |
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6"> | |
<!-- Patient Info Column --> | |
<div class="lg:col-span-1"> | |
<div class="bg-white rounded-lg shadow-lg p-6 patient-card"> | |
<div class="flex justify-between items-center mb-4"> | |
<h2 class="text-xl font-bold text-gray-800">Current Patient</h2> | |
<span class="bg-indigo-100 text-indigo-800 text-xs font-semibold px-2.5 py-0.5 rounded">New</span> | |
</div> | |
<div id="patientImageContainer" class="mb-4 relative"> | |
<div class="w-full h-64 bg-gray-200 rounded-lg flex items-center justify-center overflow-hidden"> | |
<img id="patientImage" src="https://images.unsplash.com/photo-1529626455594-4ff0802cfb7e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=687&q=80" alt="Patient" class="w-full h-full object-cover"> | |
</div> | |
<div class="absolute bottom-2 left-2 bg-black bg-opacity-50 text-white px-2 py-1 rounded text-sm"> | |
<i class="fas fa-heart mr-1 text-red-400"></i> <span id="patientConsent">Consent Confirmed</span> | |
</div> | |
</div> | |
<div id="patientDetails"> | |
<div class="grid grid-cols-2 gap-4 mb-4"> | |
<div> | |
<p class="text-gray-500 text-sm">Name</p> | |
<p id="patientName" class="font-semibold">Emily Chen</p> | |
</div> | |
<div> | |
<p class="text-gray-500 text-sm">Age</p> | |
<p id="patientAge" class="font-semibold">17</p> | |
</div> | |
<div> | |
<p class="text-gray-500 text-sm">Occupation</p> | |
<p id="patientOccupation" class="font-semibold">Agricultural Worker</p> | |
</div> | |
<div> | |
<p class="text-gray-500 text-sm">Nationality</p> | |
<p id="patientNationality" class="font-semibold">China</p> | |
</div> | |
</div> | |
<div class="mb-4"> | |
<div class="flex justify-between items-center mb-2"> | |
<p class="text-gray-500 text-sm">Body Dimensions</p> | |
<button id="showAllDetails" class="text-xs text-indigo-600 hover:text-indigo-800">Show All</button> | |
</div> | |
<div class="grid grid-cols-2 gap-4"> | |
<div> | |
<p class="text-gray-500 text-xs">Height</p> | |
<p id="patientHeight" class="font-semibold text-sm">5'4"</p> | |
</div> | |
<div> | |
<p class="text-gray-500 text-xs">Weight</p> | |
<p id="patientWeight" class="font-semibold text-sm">121 lbs</p> | |
</div> | |
<div> | |
<p class="text-gray-500 text-xs">Bust</p> | |
<p id="patientBust" class="font-semibold text-sm">36C</p> | |
</div> | |
<div> | |
<p class="text-gray-500 text-xs">Cycle</p> | |
<p id="patientCycle" class="font-semibold text-sm">12-18</p> | |
</div> | |
</div> | |
</div> | |
<div id="fullDetails" class="hidden"> | |
<div class="border-t border-gray-200 pt-4 mt-4"> | |
<h3 class="text-sm font-semibold text-gray-700 mb-2">Gynecological Details</h3> | |
<div class="space-y-2"> | |
<div class="grid grid-cols-2 gap-2"> | |
<p class="text-gray-500 text-xs">Vaginal Lip Color</p> | |
<p id="vaginalLipColor" class="font-semibold text-xs">Light pink</p> | |
</div> | |
<div class="grid grid-cols-2 gap-2"> | |
<p class="text-gray-500 text-xs">Clitoral Length</p> | |
<p id="clitoralLength" class="font-semibold text-xs">0.3 inches</p> | |
</div> | |
<div class="grid grid-cols-2 gap-2"> | |
<p class="text-gray-500 text-xs">Vaginal Canal</p> | |
<p id="vaginalCanal" class="font-semibold text-xs">3.1 inches</p> | |
</div> | |
<div class="grid grid-cols-2 gap-2"> | |
<p class="text-gray-500 text-xs">Areola Diam.</p> | |
<p id="areolaDiam" class="font-semibold text-xs">1.2 inches</p> | |
</div> | |
</div> | |
</div> | |
<div class="border-t border-gray-200 pt-4 mt-4"> | |
<h3 class="text-sm font-semibold text-gray-700 mb-2">Psychological Profile</h3> | |
<p id="psychologicalProfile" class="text-xs text-gray-700">Somewhat introverted but opens up during counseling sessions. Reports anxiety about colony's future. Responds well to reassuring touch during procedures.</p> | |
</div> | |
</div> | |
<div class="border-t border-gray-200 pt-4 mt-4"> | |
<h3 class="text-sm font-semibold text-gray-700 mb-2">Medical History</h3> | |
<p id="medicalHistory" class="text-xs text-gray-700">No major illnesses. Mild vaginal yeast infection treated successfully last year. Regular menstrual cycles with moderate cramping.</p> | |
</div> | |
</div> | |
<div class="mt-6 space-y-3"> | |
<button id="generateNewPatient" class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-2 px-4 rounded-lg transition duration-200 flex items-center justify-center"> | |
<i class="fas fa-user-plus mr-2"></i> Generate New Patient | |
</button> | |
<button id="captureGenitalImage" class="w-full bg-pink-600 hover:bg-pink-700 text-white font-bold py-2 px-4 rounded-lg transition duration-200 flex items-center justify-center"> | |
<i class="fas fa-camera mr-2"></i> Capture Genital Image | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Procedure Column --> | |
<div class="lg:col-span-2"> | |
<div class="bg-white rounded-lg shadow-lg p-6 mb-6"> | |
<div class="flex justify-between items-center mb-4"> | |
<h2 class="text-xl font-bold text-gray-800">Medical Procedure</h2> | |
<div class="flex space-x-2"> | |
<span class="bg-green-100 text-green-800 text-xs font-semibold px-2.5 py-0.5 rounded">In Progress</span> | |
<span class="bg-blue-100 text-blue-800 text-xs font-semibold px-2.5 py-0.5 rounded">GYN-78</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<h3 class="text-lg font-semibold text-gray-700 mb-2">Select Procedure</h3> | |
<div class="grid grid-cols-2 md:grid-cols-4 gap-3"> | |
<button class="procedure-btn bg-purple-100 hover:bg-purple-200 text-purple-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="exam"> | |
<i class="fas fa-procedures mr-1"></i> Full Exam | |
</button> | |
<button class="procedure-btn bg-blue-100 hover:bg-blue-200 text-blue-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="pap"> | |
<i class="fas fa-microscope mr-1"></i> Pap Smear | |
</button> | |
<button class="procedure-btn bg-green-100 hover:bg-green-200 text-green-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="waxing"> | |
<i class="fas fa-spa mr-1"></i> Vaginal Waxing | |
</button> | |
<button class="procedure-btn bg-yellow-100 hover:bg-yellow-200 text-yellow-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="cleaning"> | |
<i class="fas fa-pump-soap mr-1"></i> Vaginal Cleaning | |
</button> | |
<button class="procedure-btn bg-red-100 hover:bg-red-200 text-red-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="mammogram"> | |
<i class="fas fa-heartbeat mr-1"></i> Mammogram | |
</button> | |
<button class="procedure-btn bg-indigo-100 hover:bg-indigo-200 text-indigo-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="douche"> | |
<i class="fas fa-shower mr-1"></i> Medical Douching | |
</button> | |
<button class="procedure-btn bg-pink-100 hover:bg-pink-200 text-pink-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="enema"> | |
<i class="fas fa-toilet mr-1"></i> Enema | |
</button> | |
<button class="procedure-btn bg-gray-100 hover:bg-gray-200 text-gray-800 py-2 px-3 rounded-lg text-sm transition" data-procedure="counsel"> | |
<i class="fas fa-comments mr-1"></i> Counseling | |
</button> | |
</div> | |
</div> | |
<div id="procedureLog" class="medical-record rounded-lg p-4 h-64 overflow-y-auto mb-4"> | |
<div class="text-gray-500 text-center py-8"> | |
<i class="fas fa-clipboard-list text-3xl mb-2 text-gray-300"></i> | |
<p>Select a procedure to begin documentation</p> | |
</div> | |
</div> | |
<div class="flex justify-between"> | |
<button id="saveRecord" class="bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-2 px-4 rounded-lg transition duration-200 disabled:bg-indigo-300" disabled> | |
<i class="fas fa-save mr-1"></i> Save Record | |
</button> | |
<button id="completeSession" class="bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-4 rounded-lg transition duration-200 hidden"> | |
<i class="fas fa-check mr-1"></i> Complete Session | |
</button> | |
</div> | |
</div> | |
<!-- Statistics Section --> | |
<div class="bg-white rounded-lg shadow-lg p-6"> | |
<h2 class="text-xl font-bold text-gray-800 mb-4">Colony Statistics</h2> | |
<div class="grid grid-cols-2 md:grid-cols-4 gap-4"> | |
<div class="bg-indigo-50 p-3 rounded-lg"> | |
<p class="text-xs text-indigo-600 font-semibold mb-1">Total Population</p> | |
<p class="text-2xl font-bold text-indigo-800">301</p> | |
</div> | |
<div class="bg-pink-50 p-3 rounded-lg"> | |
<p class="text-xs text-pink-600 font-semibold mb-1">Female</p> | |
<p class="text-2xl font-bold text-pink-800">300</p> | |
</div> | |
<div class="bg-blue-50 p-3 rounded-lg"> | |
<p class="text-xs text-blue-600 font-semibold mb-1">Patients Seen</p> | |
<p class="text-2xl font-bold text-blue-800" id="patientsSeen">78</p> | |
</div> | |
<div class="bg-green-50 p-3 rounded-lg"> | |
<p class="text-xs text-green-600 font-semibold mb-1">Successful Treatments</p> | |
<p class="text-2xl font-bold text-green-800" id="successfulTreatments">75</p> | |
</div> | |
<div class="bg-purple-50 p-3 rounded-lg"> | |
<p class="text-xs text-purple-600 font-semibold mb-1">Active Marriages</p> | |
<p class="text-2xl font-bold text-purple-800">12</p> | |
</div> | |
<div class="bg-yellow-50 p-3 rounded-lg"> | |
<p class="text-xs text-yellow-600 font-semibold mb-1">Single Women</p> | |
<p class="text-2xl font-bold text-yellow-800">253</p> | |
</div> | |
<div class="bg-red-50 p-3 rounded-lg"> | |
<p class="text-xs text-red-600 font-semibold mb-1">Ship Condition</p> | |
<p class="text-2xl font-bold text-red-800">Critical</p> | |
</div> | |
<div class="bg-teal-50 p-3 rounded-lg"> | |
<p class="text-xs text-teal-600 font-semibold mb-1">Days in Orbit</p> | |
<p class="text-2xl font-bold text-teal-800">578</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script> | |
// Patient Database | |
const nationalityDistribution = [ | |
{country: "United States", count: 50}, | |
{country: "China", count: 50}, | |
{country: "Russia", count: 50}, | |
{country: "India", count: 50}, | |
{country: "Brazil", count: 50}, | |
{country: "Other", count: 50} | |
]; | |
const ageDistribution = [ | |
{age: 18, count: 50}, | |
{age: 17, count: 75}, | |
{age: 16, count: 175} | |
]; | |
const occupations = [ | |
"Medical Professional", "Engineer", "Agricultural Worker", | |
"Scientist", "Maintenance Personnel", "Administrative Staff", | |
"Teacher/Educator", "Other" | |
]; | |
const firstNames = [ | |
"Emily", "Sophia", "Emma", "Olivia", "Ava", "Isabella", "Mia", "Charlotte", | |
"Amelia", "Harper", "Evelyn", "Abigail", "Emily", "Elizabeth", "Sofia", | |
"Avery", "Ella", "Scarlett", "Grace", "Chloe", "Victoria", "Riley", "Aria", | |
"Lily", "Zoey", "Hannah", "Lillian", "Addison", "Layla", "Natalie", "Camila", | |
"Leah", "Savannah", "Audrey", "Brooklyn", "Claire", "Skylar", "Lucy", "Paisley", | |
"Caroline", "Violet", "Madelyn", "Naomi", "Ruby", "Stella", "Sadie", "Hazel", | |
"Aurora", "Ellie", "Kinsley", "Aaliyah", "Nora", "Scarlett", "Hanna", "Sarah" | |
]; | |
const lastNames = [ | |
"Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis", | |
"Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez", "Wilson", "Anderson", | |
"Thomas", "Taylor", "Moore", "Jackson", "Martin", "Lee", "Perez", "Thompson", | |
"White", "Harris", "Sanchez", "Clark", "Ramirez", "Lewis", "Robinson", "Walker", | |
"Young", "Allen", "King", "Wright", "Scott", "Torres", "Nguyen", "Hill", "Flores", | |
"Green", "Adams", "Nelson", "Baker", "Hall", "Rivera", "Campbell", "Mitchell", | |
"Carter", "Roberts", "Chen", "Li", "Wang", "Kim", "Tran", "Patel", "Singh", "Gupta" | |
]; | |
const nationalitySurnames = { | |
"United States": ["Smith", "Johnson", "Williams", "Brown", "Jones", "Miller", "Wilson", "Taylor"], | |
"China": ["Wang", "Li", "Zhang", "Liu", "Chen", "Yang", "Huang", "Zhao"], | |
"Russia": ["Ivanova", "Smirnova", "Kuznetsova", "Popova", "Sokolova", "Lebedeva", "Kozlova", "Novikova"], | |
"India": ["Patel", "Sharma", "Singh", "Kumar", "Gupta", "Joshi", "Banerjee", "Choudhury"], | |
"Brazil": ["Silva", "Santos", "Oliveira", "Souza", "Rodrigues", "Ferreira", "Alves", "Pereira"], | |
"Other": ["Garcia", "Martinez", "Hernandez", "Lopez", "Gonzalez", "Rodriguez", "Sanchez", "Ramirez"] | |
}; | |
const personalityTraits = [ | |
"Introverted", "Extroverted", "Ambitious", "Reserved", "Creative", "Practical", | |
"Optimistic", "Pessimistic", "Trustworthy", "Skeptical", "Loyal", "Independent", | |
"Organized", "Spontaneous", "Patient", "Impulsive", "Empathetic", "Logical", | |
"Adventurous", "Cautious", "Confident", "Insecure", "Cheerful", "Serious" | |
]; | |
const psychologicalProfiles = [ | |
"Shows signs of social anxiety but responds well to gentle reassurance. Benefits from focused breathing exercises during procedures.", | |
"Highly extroverted personality masking underlying depression. Responds positively to detailed explanation of procedures.", | |
"Exhibits mild obsessive-compulsive tendencies regarding cleanliness. Needs reassurance about sterility protocols.", | |
"Displays typical adjustment disorder with mixed anxiety and depressive mood secondary to cryo-sleep transition.", | |
"Demonstrates above-average resilience and coping skills. Minimal psychological intervention needed.", | |
"Manifesting situational anxiety related to fertility concerns. Benefits from Dr. Tito's specialized counseling techniques.", | |
"Shows signs of mild PTSD from cryo-sleep awakening. Requires slower-paced procedures with frequent check-ins.", | |
"Exhibits strong leadership tendencies with underlying stress from colony responsibilities. Benefits from relaxation techniques." | |
]; | |
const medicalHistories = [ | |
"No significant medical history. Previous mild vaginal yeast infection resolved with topical treatment.", | |
"History of irregular menstrual cycles now stabilized with colony nutritional supplements.", | |
"Treated for mild iron deficiency anemia upon awakening from cryo-sleep. Shows good response to iron supplements.", | |
"Past medical history of childhood asthma, no recent symptoms. Mild exercise-induced bronchospasm noted.", | |
"Previous diagnosis of polycystic ovarian syndrome. Currently well-managed with colony dietary protocol.", | |
"No known allergies. History of vasovagal syncope during blood draws now controlled with pre-procedure hydration.", | |
"History of migraines associated with menstrual cycle, decreased frequency with colony-approved prophylaxis.", | |
"Reports previous sexual trauma before cryo-sleep. Fully consented to all procedures after extensive counseling." | |
]; | |
// Procedure logs | |
const procedureDetails = { | |
exam: [ | |
"Patient placed in dorsal lithotomy position with legs flexed and abducted.", | |
"External genitalia inspected visually noting symmetry, coloration, and any abnormalities.", | |
"Labia majora and minora gently separated using gloved fingers to expose vaginal introitus.", | |
"Bartholin's glands palpated bilaterally with index finger inside posterior vagina and thumb externally.", | |
"Speculum warmed and lubricated before insertion to minimize discomfort.", | |
"Speculum slowly inserted at 45-degree angle with downward pressure on posterior vaginal wall.", | |
"Cervix visualized with careful documentation of position, color, surface characteristics.", | |
"Bimanual examination performed with two fingers in vagina and other hand on lower abdomen.", | |
"Rectovaginal examination conducted to assess rectovaginal septum and posterior pelvic structures." | |
], | |
pap: [ | |
"Patient positioned in lithotomy with feet securely placed in stirrups.", | |
"Speculum carefully inserted and opened to visualize cervix adequately.", | |
"Brush rotated gently at cervical os to collect endo and ectocervical cells.", | |
"Transformation zone sampled thoroughly with rotating motion technique.", | |
"Cell sample quickly transferred to preservative medium with attention to prevent drying artifact.", | |
"Cervical os inspected for bleeding post-procedure (none noted).", | |
"Slide technique demonstrated 100% cellularity with good preservation." | |
], | |
waxing: [ | |
"Vulvar area cleansed with hypoallergenic antiseptic solution prior to procedure.", | |
"Wax warmed to precisely 45°C (113°F) for optimal viscosity and adhesion.", | |
"Small test patch applied to medial thigh to assess skin sensitivity.", | |
"Using wooden applicators, wax applied in direction of hair growth in thin, uniform layers.", | |
"Muslin strips pressed firmly onto wax following hair growth pattern.", | |
"Removal performed with swift motion opposite to hair growth direction.", | |
"Each strip examined to confirm complete follicular hair removal.", | |
"Post-wax soothing gel with aloe vera applied liberally to treated areas." | |
], | |
cleaning: [ | |
"Patient positioned comfortably in semi-recumbent position.", | |
"Gentle external cleansing with pH-balanced hypoallergenic solution begun.", | |
"Labial folds carefully cleaned with moistened cotton swabs in outward strokes.", | |
"Clitoral hood retracted gently to clean accumulated smegma if present.", | |
"Vaginal introitus irrigated with warm saline solution using angled-tip syringe.", | |
"Water temperature maintained at 37°C (98.6°F) for patient comfort.", | |
"No forceful irrigation used to prevent disruption of natural microbiome.", | |
"Aftercare instructions provided including recommendation for cotton undergarments." | |
], | |
mammogram: [ | |
"Patient positioned standing facing mammography unit.", | |
"Breast placed on detector plate with gradual compression applied.", | |
"Mediolateral oblique view obtained first with 45-degree angulation.", | |
"Craniocaudal compression maintained for standard 8-10 seconds per exposure.", | |
"Specialized paddle used to ensure uniform thickness and tissue inclusion.", | |
"Compression released immediately after exposure completion.", | |
"Kept imaging parameters within safe limits (average AGD < 3 mGy per view).", | |
"Images reviewed immediately for positioning adequacy before patient dismissal." | |
], | |
douche: [ | |
"Pre-procedure consultation reviewed benefits/risks with patient.", | |
"Douche nozzle sterilized and lubricated with water-soluble gel.", | |
"Solution temperature adjusted to exactly 38°C (100.4°F) for comfort.", | |
"Formula prepared per colony medical protocol (pH 4.0 lactic acid solution).", | |
"Slow insertion technique used with continuous verbal reassurance.", | |
"Solution instilled with intermittent pauses to assess comfort level.", | |
"500ml total volume administered over approximately 3 minutes.", | |
"Post-procedure pelvic rest recommended for minimum 6 hours." | |
], | |
enema: [ | |
"Patient positioned in left lateral recumbent position with right knee drawn up.", | |
"Anoscope inserted gently under direct visualization.", | |
"Rectal vault examined digitally for any abnormalities prior to instillation.", | |
"Enema bag suspended at precisely 60cm above patient for controlled flow.", | |
"500ml warmed saline solution slowly infused over 5-7 minute period.", | |
"Encouraged retention for maximum therapeutic benefit (10 minutes achieved).", | |
"Patient monitored closely during evacuation process.", | |
"Post-procedure electrolyte replacement protocol initiated." | |
], | |
counsel: [ | |
"Active listening techniques employed with frequent summarization of patient concerns.", | |
"Cognitive behavioral approach used to address maladaptive thought patterns.", | |
"Guided imagery exercises tailored to patient's specific anxiety triggers.", | |
"Relaxation training incorporated with progressive muscle techniques.", | |
"Colony-specific stress management strategies discussed in detail.", | |
"Session duration extended to full 50 minutes per patient request.", | |
"Patient demonstrated improved mood metrics post-session based on standardized scales.", | |
"Follow-up appointment schedule established with graduated intervals." | |
] | |
}; | |
// Game state | |
let currentProcedure = null; | |
let procedureLog = []; | |
let patientsSeen = 78; | |
let successfulTreatments = 75; | |
// DOM Elements | |
const patientNameEl = document.getElementById('patientName'); | |
const patientAgeEl = document.getElementById('patientAge'); | |
const patientOccupationEl = document.getElementById('patientOccupation'); | |
const patientNationalityEl = document.getElementById('patientNationality'); | |
const patientHeightEl = document.getElementById('patientHeight'); | |
const patientWeightEl = document.getElementById('patientWeight'); | |
const patientBustEl = document.getElementById('patientBust'); | |
const patientCycleEl = document.getElementById('patientCycle'); | |
const vaginalLipColorEl = document.getElementById('vaginalLipColor'); | |
const clitoralLengthEl = document.getElementById('clitoralLength'); | |
const vaginalCanalEl = document.getElementById('vaginalCanal'); | |
const areolaDiamEl = document.getElementById('areolaDiam'); | |
const psychologicalProfileEl = document.getElementById('psychologicalProfile'); | |
const medicalHistoryEl = document.getElementById('medicalHistory'); | |
const patientImageEl = document.getElementById('patientImage'); | |
const showAllDetailsBtn = document.getElementById('showAllDetails'); | |
const fullDetailsEl = document.getElementById('fullDetails'); | |
const generateNewPatientBtn = document.getElementById('generateNewPatient'); | |
const procedureLogEl = document.getElementById('procedureLog'); | |
const saveRecordBtn = document.getElementById('saveRecord'); | |
const completeSessionBtn = document.getElementById('completeSession'); | |
const procedureBtns = document.querySelectorAll('.procedure-btn'); | |
const patientsSeenEl = document.getElementById('patientsSeen'); | |
const successfulTreatmentsEl = document.getElementById('successfulTreatments'); | |
// Event Listeners | |
document.addEventListener('DOMContentLoaded', () => { | |
patientsSeenEl.textContent = patientsSeen; | |
successfulTreatmentsEl.textContent = successfulTreatments; | |
}); | |
showAllDetailsBtn.addEventListener('click', () => { | |
fullDetailsEl.classList.toggle('hidden'); | |
showAllDetailsBtn.textContent = fullDetailsEl.classList.contains('hidden') ? 'Show All' : 'Hide Details'; | |
}); | |
generateNewPatientBtn.addEventListener('click', generateNewPatient); | |
procedureBtns.forEach(btn => { | |
btn.addEventListener('click', () => { | |
const procedure = btn.dataset.procedure; | |
startProcedure(procedure); | |
}); | |
}); | |
saveRecordBtn.addEventListener('click', () => { | |
saveProcedure(); | |
}); | |
completeSessionBtn.addEventListener('click', () => { | |
completeSession(); | |
}); | |
document.getElementById('captureGenitalImage').addEventListener('click', () => { | |
Swal.fire({ | |
title: 'Genital Image Captured', | |
html: ` | |
<div class="text-center"> | |
<img src="https://images.unsplash.com/photo-1611591437281-460914d22803?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=687&q=80" | |
class="mx-auto mb-4 rounded-lg w-64 h-64 object-cover"> | |
<p class="text-sm text-gray-600">Image saved to patient record</p> | |
</div> | |
`, | |
showConfirmButton: true, | |
confirmButtonText: 'OK', | |
showCancelButton: true, | |
cancelButtonText: 'Retake', | |
focusConfirm: false, | |
customClass: { | |
popup: 'w-96' | |
} | |
}).then((result) => { | |
if (result.isConfirmed) { | |
// Add to procedure log | |
const now = new Date(); | |
const timestamp = now.toLocaleString(); | |
procedureLog.push(`<div class="mb-3 fade-in"> | |
<div class="text-xs text-gray-500 mb-1">${timestamp}</div> | |
<div class="flex items-start"> | |
<div class="bg-pink-100 rounded-full w-6 h-6 flex items-center justify-center mr-2 flex-shrink-0"> | |
<i class="fas fa-camera text-pink-600 text-xs"></i> | |
</div> | |
<div class="bg-white rounded-lg p-3 shadow-sm flex-1"> | |
<div class="font-semibold text-pink-800 mb-1">Genital Image Captured</div> | |
<p>Standardized genital/pubic area photograph archived to patient record.</p> | |
</div> | |
</div> | |
</div>`); | |
procedureLogEl.innerHTML = procedureLog.join(''); | |
procedureLogEl.scrollTop = procedureLogEl.scrollHeight; | |
} | |
}); | |
}); | |
// Functions | |
function generateNewPatient() { | |
// Reset UI | |
procedureLog = []; | |
procedureLogEl.innerHTML = `<div class="mb-3 fade-in"> | |
<div class="text-xs text-gray-500 mb-1">${new Date().toLocaleString()}</div> | |
<div class="flex items-start"> | |
<div class="bg-indigo-100 rounded-full w-6 h-6 flex items-center justify-center mr-2 flex-shrink-0"> | |
<i class="fas fa-notes-medical text-indigo-600 text-xs"></i> | |
</div> | |
<div class="bg-white rounded-lg p-3 shadow-sm flex-1"> | |
<div class="font-semibold text-indigo-800 mb-1">Vaginal Cleaning initiated</div> | |
<p>Patient properly positioned and consented for Vaginal Cleaning procedure.</p> | |
</div> | |
</div> | |
</div>`; | |
currentProcedure = 'cleaning'; | |
saveRecordBtn.disabled = false; | |
completeSessionBtn.classList.remove('hidden'); | |
saveRecordBtn.disabled = true; | |
completeSessionBtn.classList.add('hidden'); | |
fullDetailsEl.classList.add('hidden'); | |
showAllDetailsBtn.textContent = 'Show All'; | |
currentProcedure = null; | |
// Generate random patient details | |
const nationality = getWeightedRandomNationality(); | |
const age = getWeightedRandomAge(); | |
const firstName = firstNames[Math.floor(Math.random() * firstNames.length)]; | |
const lastName = nationalitySurnames[nationality] | |
? nationalitySurnames[nationality][Math.floor(Math.random() * nationalitySurnames[nationality].length)] | |
: lastNames[Math.floor(Math.random() * lastNames.length)]; | |
patientNameEl.textContent = `${firstName} ${lastName}`; | |
patientAgeEl.textContent = age; | |
patientOccupationEl.textContent = occupations[Math.floor(Math.random() * occupations.length)]; | |
patientNationalityEl.textContent = nationality; | |
// Generate realistic body measurements | |
const heightFeet = age === 16 ? Math.floor(Math.random() * 3) + 4 : Math.floor(Math.random() * 3) + 5; | |
const heightInches = Math.floor(Math.random() * 11) + 1; | |
patientHeightEl.textContent = `${heightFeet}'${heightInches}"`; | |
const baseWeight = age === 16 ? 95 : 105; | |
const weightVariance = Math.floor(Math.random() * 40) + 5; | |
patientWeightEl.textContent = `${baseWeight + weightVariance} lbs`; | |
const cupSizes = ['A', 'B', 'C', 'D']; | |
const bandSize = age === 16 ? Math.floor(Math.random() * 3) + 32 : Math.floor(Math.random() * 4) + 32; | |
patientBustEl.textContent = `${bandSize}${cupSizes[Math.floor(Math.random() * cupSizes.length)]}`; | |
const cycleStart = Math.floor(Math.random() * 5) + 1; | |
const cycleEnd = cycleStart + Math.floor(Math.random() * 3) + 3; | |
patientCycleEl.textContent = `${cycleStart}-${cycleEnd}`; | |
// Generate gynecological details | |
const vaginalLipColors = ['Light pink', 'Medium pink', 'Pale brown', 'Dusky pink']; | |
vaginalLipColorEl.textContent = vaginalLipColors[Math.floor(Math.random() * vaginalLipColors.length)]; | |
clitoralLengthEl.textContent = `${(Math.random() * 0.4 + 0.2).toFixed(2)} inches`; | |
const vaginalCanalLength = (Math.random() * 1 + 2.5).toFixed(1); | |
vaginalCanalEl.textContent = `${vaginalCanalLength} inches`; | |
areolaDiamEl.textContent = `${(Math.random() * 0.6 + 0.8).toFixed(1)} inches`; | |
psychologicalProfileEl.textContent = psychologicalProfiles[Math.floor(Math.random() * psychologicalProfiles.length)]; | |
medicalHistoryEl.textContent = medicalHistories[Math.floor(Math.random() * medicalHistories.length)]; | |
// Generate appropriate image based on nationality | |
let imgUrl; | |
switch(nationality) { | |
case "China": | |
imgUrl = "https://images.unsplash.com/photo-1529626455594-4ff0802cfb7e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=687&q=80"; | |
break; | |
case "India": | |
imgUrl = "https://images.unsplash.com/photo-1524504388940-b1c1722653e1?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=687&q=80"; | |
break; | |
case "Brazil": | |
imgUrl = "https://images.unsplash.com/photo-1532074205216-d0e1f4b87368?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=741&q=80"; | |
break; | |
case "Russia": | |
imgUrl = "https://images.unsplash.com/photo-1530825894095-9c184b564d98?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=687&q=80"; | |
break; | |
case "United States": | |
imgUrl = "https://images.unsplash.com/photo-1506956191251-7e3cf95a7816?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=687&q=80"; | |
break; | |
default: | |
imgUrl = "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1470&q=80"; | |
} | |
patientImageEl.src = imgUrl; | |
// Show confirmation | |
Swal.fire({ | |
position: 'top-end', | |
icon: 'success', | |
title: 'New patient generated', | |
showConfirmButton: false, | |
timer: 1500 | |
}); | |
} | |
function getWeightedRandomNationality() { | |
const total = nationalityDistribution.reduce((sum, item) => sum + item.count, 0); | |
let random = Math.floor(Math.random() * total); | |
for (const item of nationalityDistribution) { | |
if (random < item.count) { | |
return item.country; | |
} | |
random -= item.count; | |
} | |
return "Other"; | |
} | |
function getWeightedRandomAge() { | |
const total = ageDistribution.reduce((sum, item) => sum + item.count, 0); | |
let random = Math.floor(Math.random() * total); | |
for (const item of ageDistribution) { | |
if (random < item.count) { | |
return item.age; | |
} | |
random -= item.count; | |
} | |
return 16; | |
} | |
function startProcedure(procedure) { | |
currentProcedure = procedure; | |
procedureLog = []; | |
// Add initial procedure note | |
const now = new Date(); | |
const timestamp = now.toLocaleString(); | |
procedureLog.push(`<div class="mb-3 fade-in"> | |
<div class="text-xs text-gray-500 mb-1">${timestamp}</div> | |
<div class="flex items-start"> | |
<div class="bg-indigo-100 rounded-full w-6 h-6 flex items-center justify-center mr-2 flex-shrink-0"> | |
<i class="fas fa-notes-medical text-indigo-600 text-xs"></i> | |
</div> | |
<div class="bg-white rounded-lg p-3 shadow-sm flex-1"> | |
<div class="font-semibold text-indigo-800 mb-1">${getProcedureName(procedure)} initiated</div> | |
<p>Patient properly positioned and consented for ${getProcedureName(procedure)} procedure.</p> | |
</div> | |
</div> | |
</div>`); | |
// Display initial log | |
procedureLogEl.innerHTML = procedureLog.join(''); | |
procedureLogEl.scrollTop = procedureLogEl.scrollHeight; | |
// Enable save button | |
saveRecordBtn.disabled = false; | |
completeSessionBtn.classList.remove('hidden'); | |
// Show procedure-specific buttons | |
Swal.fire({ | |
position: 'top-end', | |
icon: 'info', | |
title: `${getProcedureName(procedure)} started`, | |
showConfirmButton: false, | |
timer: 1500 | |
}); | |
} | |
function getProcedureName(procedure) { | |
const names = { | |
exam: "Full Gynecological Exam", | |
pap: "Pap Smear", | |
waxing: "Vaginal Waxing", | |
cleaning: "Vaginal Cleaning", | |
mammogram: "Mammogram", | |
douche: "Medical Douching", | |
enema: "Enema", | |
counsel: "Counseling Session" | |
}; | |
return names[procedure] || procedure; | |
} | |
function saveProcedure() { | |
if (!currentProcedure) return; | |
// Get random procedure steps | |
const steps = procedureDetails[currentProcedure]; | |
const randomSteps = []; | |
const stepsCount = Math.min(3, steps.length); // Show 2-3 steps at a time | |
// Select random unique steps | |
while (randomSteps.length < stepsCount) { | |
const randomIndex = Math.floor(Math.random() * steps.length); | |
if (!randomSteps.includes(steps[randomIndex])) { | |
randomSteps.push(steps[randomIndex]); | |
} | |
} | |
// Add steps to log | |
const now = new Date(); | |
const timestamp = now.toLocaleString(); | |
let stepsHTML = randomSteps.map(step => ` | |
<div class="flex items-start mb-2"> | |
<div class="bg-gray-100 rounded-full w-5 h-5 flex items-center justify-center mr-2 mt-0.5 flex-shrink-0"> | |
<i class="fas fa-circle text-gray-400 text-2xs"></i> | |
</div> | |
<div class="text-sm">${step}</div> | |
</div> | |
`).join(''); | |
procedureLog.push(`<div class="mb-3 fade-in"> | |
<div class="text-xs text-gray-500 mb-1">${timestamp}</div> | |
<div class="flex items-start"> | |
<div class="bg-indigo-100 rounded-full w-6 h-6 flex items-center justify-center mr-2 flex-shrink-0"> | |
<i class="fas fa-procedures text-indigo-600 text-xs"></i> | |
</div> | |
<div class="bg-white rounded-lg p-3 shadow-sm flex-1"> | |
<div class="font-semibold text-indigo-800 mb-1">Procedure Update</div> | |
${stepsHTML} | |
</div> | |
</div> | |
</div>`); | |
// Update log display | |
procedureLogEl.innerHTML = procedureLog.join(''); | |
procedureLogEl.scrollTop = procedureLogEl.scrollHeight; | |
// Show confirmation | |
Swal.fire({ | |
position: 'top-end', | |
icon: 'success', | |
title: 'Procedure updated', | |
showConfirmButton: false, | |
timer: 1500 | |
}); | |
} | |
function completeSession() { | |
if (!currentProcedure) return; | |
// Add completion note | |
const now = new Date(); | |
const timestamp = now.toLocaleString(); | |
procedureLog.push(`<div class="mb-3 fade-in"> | |
<div class="text-xs text-gray-500 mb-1">${timestamp}</div> | |
<div class="flex items-start"> | |
<div class="bg-green-100 rounded-full w-6 h-6 flex items-center justify-center mr-2 flex-shrink-0"> | |
<i class="fas fa-check text-green-600 text-xs"></i> | |
</div> | |
<div class="bg-white rounded-lg p-3 shadow-sm flex-1"> | |
<div class="font-semibold text-green-800 mb-1">Procedure Completed</div> | |
<p>${getProcedureName(currentProcedure)} successfully completed. Patient discharged with aftercare instructions.</p> | |
</div> | |
</div> | |
</div>`); | |
// Update log display | |
procedureLogEl.innerHTML = procedureLog.join(''); | |
procedureLogEl.scrollTop = procedureLogEl.scrollHeight; | |
// Update stats | |
patientsSeen++; | |
successfulTreatments++; | |
patientsSeenEl.textContent = patientsSeen; | |
successfulTreatmentsEl.textContent = successfulTreatments; | |
// Reset UI | |
saveRecordBtn.disabled = true; | |
completeSessionBtn.classList.add('hidden'); | |
currentProcedure = null; | |
// Show completion message | |
Swal.fire({ | |
position: 'center', | |
icon: 'success', | |
title: 'Procedure Completed', | |
text: 'Patient record has been updated', | |
showConfirmButton: false, | |
timer: 2000 | |
}); | |
} | |
</script> | |
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=sevangelen/tulip" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |