Browser does not support script.
Browser does not support script.
Browser does not support script.
Browser does not support script.
Browser does not support script.
Browser does not support script.
Browser does not support script.
Browser does not support script.
Browser does not support script.
Clinical Research in Southampton
Southampton Children's Hospital
A
A
A
Text only
| Accessibility | Privacy and cookies
"Helpful, informative, polite and friendly staff put my mind at ease"
Patient feedback
Home
About the Trust
Our services
Patients and visitors
Our hospitals
Education
Research
Working here
Contact us
You are here:
Home
>
Search results
Search
Browse site A to Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Search results
Go To Advanced Search
Search
Opt out of research
Description
Auto Generated Title While most of our research is done on an
opt
in basis, participants also have the opportu
Url
/ClinicalResearchinSouthampton/Public-and-patients/Opt-out-of-research.aspx
CCP-UK Patient Data Notification v0.2 05MAY2022
Description
_______________________________________________ CCP-UK Patient Data Notification _______________________________________________ The purpose of this document is to inform our participants about how their data is used in our study. What is CCP-UK? The CCP-UK (Clinical Characterisation Protocol – United Kingdom) is a study that collects information about infectious diseases and potential exposures of public health importance quickly and efficiently in response to potential public health crises. The study was activated in January 2020 in response to the emergence of what was then called Wuhan Flu, which led to the COVID-19 pandemic. Since being activated, we have recruited over 300,000 patients to the data collection aspect of our study. CCPUK is the largest study of its kind answering questions about COVID-19 in the world. We have also been activated for UK cases of Ebola, Monkeypox, Lassa Fever, Middle East Respiratory Syndrome (MERS) and for Children with severe Hepatitis. What data do we collect? Research nurses and medical students at hospitals across the UK recruited people who tested positive for COVID-19. The research nurses and medical students recorded information on patients’ hospital stay, such as whether they had any underlying conditions, what medicine they were given and what the result of their hospital stay was (discharged well, discharged disabled or death). The research team then input this information into our study database. Each patient is given a unique participant ID. No names are stored on the database and individuals cannot be directly identified. Participants’ date of birth, NHS number and postcode are also recorded on the database. This information is hugely important for the study, which is why we cannot leave it out for confidentiality purposes. Date of birth is important to allow us to analyse the impact of age on COVID-19 outcomes. NHS numbers are important as these let us link to other NHS databases to obtain further information, such as which of our participants received a particular drug to treat COVID-19, or who has received a COVID-19 vaccine. Postcodes are important to allow us to analyse the impact of deprivation factors, such as living in a poorer area, on COVID-19 outcomes. Without these key pieces of information, we wouldn’t be able to complete most of the analysis ISARIC CCP Patient Notification Form v0.2 5th May 2022 1 that we have done and would not have been able to have the same positive impact on the UK’s COVID response. Why are we allowed to collect this data without consent? In March 2020, in order to boost the UK’s response to COVID-19, the Department of Health and Social Care served the NHS with a COPI (Control of Patient Information Regulations 2002) Notice, requiring them to share confidential patient information without consent for specific purposes. These specific purposes included research on COVID-19. Because of the COPI Notice, our study has been collecting data from patients admitted to hospital in the UK with COVID-19 without getting their permission first. After expiry of the COPI Notice on 30th June 2022, the study will continue collecting data without consent under Section 251 Regulation 5 of the National Health Service Act 2006 with support from the Confidentiality Advisory Group (CAG reference: 21/CAG/0125). Being able to collect this data without obtaining permission has been very important in enabling our study to achieve what we have done. Many of the people admitted with COVID-19 were too sick to give consent themselves and because of COVID-19 precautions, they were not accompanied by relatives who could speak for them. Because we were not required to obtain consent from each of our participants, we have been able to recruit many more participants than usual and we were able to include the sickest patients who are often missed from studies like ours. We have also been able to work very quickly. Because of this, our data has been able to capture what is happening with COVID around the UK in near real-time. This allowed us to provide the health policy teams and doctors in the NHS with the most up-to-date information to guide the health response throughout the pandemic. What has the study achieved? Because we have been able to collect and analyse this data quickly and efficiently, we have been able to achieve a lot through our study. • We provide reports to SAGE and NERVTAG weekly. These are the committees that provide advice to health and social care policy makers for the UK COVID19 response. • We have been able to identify several risk factors in the UK population that are strongly associated with poor outcomes in COVID-19, including the impact of obesity, respiratory conditions and different outcomes between ethnic groups. • We have been able to provide data supporting identification of high-risk groups for COVID-19 vaccination which meant they were given priority and this saved lives. ISARIC CCP Patient Notification Form v0.2 5th May 2022 2 • We have been able to conduct research into the usefulness of COVID-19 drugs treatments and shown what works well and what does not. This all meant the people most likely to benefit from treatments and vaccines were identified in time to benefit and this saved many lives. You can review these outcomes at our website: https://isaric4c.net/outputs/. How is the data collected kept safe? We make sure that the data on our database is as secure as possible. The database is only accessible by approved colleagues with passwords, and is run by IT systems with very high standards of security. The physical notes that research nurses complete before transferring the information to the database are kept in locked rooms accessed only by hospital staff, or on hospitals’ secure electronic healthcare record system. We make sure the data is as confidential as possible by using unique participant IDs rather than names. The data collected (including date of birth, NHS number, and postcode) is only accessible by members of the study team, and is not disclosed beyond this. We intend to retain the study data (including date of birth, NHS number, and postcode) indefinitely. We have undertaken to review this retention every 5 years with oversight from the Confidentiality Advisory Group of the UK Health Research Authority. It is possible that survivors of new diseases and exposures may go on to develop problems that we can’t imagine at present. It is impossible to understand the long-term health and social effects among survivors of new diseases or exposures unless studies are made of these survivors in the future. For example, we are now using the data from severe COVID survivors to understand “Long-COVID”. Having access to the NHS numbers allows researchers to understand health outcomes over many decades. This could be incredibly important particularly for children and the unborn children of pregnant women who are infected by new diseases or are potentially exposed to other harms of public health importance. How can I opt out of having my data collected? If you have opted out of your data being used for research via the National Data OptOut (https://www.nhs.uk/your-nhs-data-matters/), we will remove your data from our database if you have been recruited. If you have not opted out of your data being used for research via the National Data Opt-Out but you would like to opt out from your data being used for our study, you can contact the study team to request this at ccp@liverpool.ac.uk. If you want to opt out ISARIC CCP Patient Notification Form v0.2 5th May 2022 3 please send us an email including your name, date of birth, NHS number and postcode. You do not need to give a reason for why you want to opt out. We will look for your details in our data and if we find it we will delete it. In any case we will email back to you within 14 days to tell you if we found your data and if we did, to confirm that your data has been removed. You can also telephone the study team to request that your data be removed by calling 07506 653560. Data protection regulation provides you with control over your personal data and how it is used. Further information about your rights with respect to your personal data is available at https://compliance.admin.ox.ac.uk/individual-rights or by contacting the study team. The University’s data protection officer can be reached at data.protection@admin.ox.ac.uk. If you would like to learn more about our study and how patient data is collected, used and protected, please visit https://isaric4c.net/privacy/. ISARIC CCP Patient Notification Form v0.2 5th May 2022 4
Url
/Media/Southampton-Clinical-Research/Downloads/CCP-UK-Patient-Data-Notification-v0.2-05MAY2022.pdf
jointtrainrev_08
Description
<!-- Hide from scriptless browsers snapAddEvent(window, 'load', snapInit); // Global settings var pageNumber=0; var lastPageNumber=0; var pBars=12; var h
Url
/suhtapps/Surveys/jointtrainrev_08.htm
pctdischarge_anti_coag08
Description
<!-- Hide from scriptless browsers snapAddEvent(window, 'load', snapInit); // Global settings var pageNumber=0; var lastPageNumber=0; var pBars=12; var hasSubmitted = false; var showButtons=true; var startPoint; var endPoint; var timerStarted = false; var allowStore=true; var g_subm = false; var objectsById=new Array(); var missingObjects=new Array(); var dependents=new Array(); var codeLabels=new Array(); var pageContents=new Array(); var askedCalc=new Array(); var askedCache=new Array(); var exclusive=new Array(); var forceReply=new Array(); var validateList=new Array(); var codeMaskList=new Array(); var autoAnsList=new Array(); var doAutoAnsList=new Array(); var gridFirstList=new Array(); var showButtonOptions=new Array(); var cacheNumCodes=new Array(); var cacheIsOpen=new Array(); var cacheIsClosed=new Array(); var cacheIsDropdown=new Array(); var cacheIsGrid=new Array(); var totalList=new Array(); var cacheSelectOptions=new Array(); var pageArray=null; var textSubLookup=null; //////////////////////////////////////////////////////////////////////////////// // System function snapInit() { snapQueryString(); lastPageNumber=snapCountNumPages(); for (var p=1; p<=lastPageNumber; p++) { snapInclude(snapObject('p_p'+p), false); } linkButton('b_next', snapNextPage); linkButton('b_back', snapBackPage); linkButton('b_submit', snapSubmitPage); linkButton('b_reset', snapResetPage); linkButton('b_restart', snapResetAll); linkButton('b_print', snapPrint); showButtonOptions['b_back']='pageNumber>=2&&pageNumber<=lastPageNumber'; showButtonOptions['b_reset']='pageNumber>=1&&pageNumber<=lastPageNumber'; showButtonOptions['b_print']='pageNumber>=1&&pageNumber<=lastPageNumber'; showButtonOptions['b_next']='pageNumber>=1&&pageNumber<=lastPageNumber-1'; showButtonOptions['b_submit']='pageNumber>=lastPageNumber&&pageNumber<=lastPageNumber'; // List off routing specifications by question id // List of variables that have one or more dependents // List of variables that have exclusive codes // List of variables that must be answered forceReply['V3']='Q1'; forceReply['V40']='Q13'; forceReply['V42']='Q14'; // Totalise Values // identify which questions are on each page pageContents[1]=new Array("V1","V2","V3","V5","V35","V4","V29","V30","V31","V32","V33","V34","V41","V36","V37","V38","V39","V19","V20","V28","V8","V40","V42"); // check question responses when they change for(var i=1; i<=lastPageNumber; i++) { if (pageContents[i]) { var pageItems = pageContents[i]; for(var j=0; j<pageItems.length; j++) { snapHookEvents(pageItems[j]); } } } // List of variables with code rotation // List of grid variables with their first grid item gridFirstList['V30']='V29'; gridFirstList['V31']='V29'; gridFirstList['V32']='V29'; gridFirstList['V33']='V29'; for(var x in gridFirstList) { var gridName=gridFirstList[x]+"_GRID"; if(askedCalc[gridName]==null) askedCalc[gridName]="asked(\""+gridFirstList[x]+"\")"; askedCalc[gridName]+="||asked(\""+x+"\")"; } // List of variables that have a mask applied to their answers // Prepare the first page var pleaseWait = snapObject("snapIntro"); if (pleaseWait != null) { var aParent=pleaseWait.parentNode; if (aParent != null) { aParent.removeChild(pleaseWait); objectsById["snapIntro"] = null; } } snapApplyInitialSubstitutions(); snapInclude(snapObject('snapbuttons'), true, 'block'); snapInclude(snapObject('snapDiv'), true, 'block'); if (lastPageNumber > 1) snapInclude(snapObject('b_progress'), true); snapNextPage(); } function linkButton(name, func) { var button = snapObject(name); var done = false; if (button && button.parentNode) { var bParent = button.parentNode; if (bParent && bParent.tagName && ("a" == bParent.tagName.toLowerCase())) { done = true; snapAddEvent(bParent, 'keypress',func); snapAddEvent(bParent, 'click',func); } } if (!done) { snapAddEvent(button, 'click',func); } } function snapQueryString() { var query=unescape(location.search.substring(1)); var pairs=query.split("&"); for(var i=0; i<pairs.length;i++) { var pos=pairs[i].indexOf('='); if (pos>0) { var argName=pairs[i].substring(0,pos); var value=pairs[i].substring(pos+1); if ((argName=="id") || (argName=="u")) {snapSetOpenReply("0",value); } else if (argName=="p") {snapSetOpenReply("0",value); } else if (argName=="s") {snapSetOpenReply("0",value); } } } } function snapMappedPage(page) { if (pageArray != null) { if(page>=1 && page<=lastPageNumber) { page=pageArray[page]; } } return page; } // System function snapHookEvents(question) { var items = snapObjectsByName(question); var i; var item; for (i=0; i<items.length; i++) { item=items[i]; if (item.type) { if (item.type=='checkbox' || item.type=='radio') snapAddEvent(item, 'click', snapChangeMade); else if (item.type=='select-one' || item.type=='select-multiple') snapAddEvent(item, 'change', snapChangeMade); else if (item.type=='text' || item.type=='textarea') snapAddEvent(item, 'blur', snapChangeMade); } } } // System function snapAddEvent(obj, evType, fn) { var result=false; if (obj) { if (obj.attachEvent) { result=obj.attachEvent("on"+evType, fn); } else if (obj.addEventListener) { obj.addEventListener(evType, fn, true); result=true; } } return result; } // System function snapGlobalDoc() { return document.forms["SnapForm"].elements; } // System function snapObject(id) { var ret = objectsById[id]; if (ret == null) { if (missingObjects[id] == null) { ret = document.getElementById(id); if (ret == null) { missingObjects[id] = true; } objectsById[id] = ret; } } return ret; } // System function snapObjectsByName(name) { return document.getElementsByName(name); } // System function snapObjectsByTagName(tagName) { return document.getElementsByTagName(tagName); } // System function snapEventOrigin(arg) { if (arg.srcElement) return arg.srcElement; else if (arg.target) return arg.target; return null; } //////////////////////////////////////////////////////////////////////////////// // Page navigation function snapCountNumPages() { var Result=0; var p=1; while(snapObject('p_p'+p)) { Result=p; p++; } return Result; } function snapSubmitPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; var okToSubmit=false; if (!hasSubmitted && snapIsIncluded(snapObject('b_submit'))) { var somethingToShow=false; var nextPage=pageNumber; while(nextPage<=lastPageNumber && snapPageValidationOk(nextPage)) { nextPage++; if(nextPage<=lastPageNumber) { somethingToShow=snapEvalShowPage(nextPage, false); } } if(nextPage > lastPageNumber) { okToSubmit = true; hasSubmitted = true; snapShowPage(lastPageNumber); } if(nextPage<=lastPageNumber) { snapShowPage(nextPage); okToSubmit=false; } } if (okToSubmit) { fEndTimer(); } else if (eventOb) { if (eventOb.cancelBubble!=null) eventOb.cancelBubble = true; if (eventOb.returnValue!=null) eventOb.returnValue = false; if (eventOb.preventDefault) eventOb.preventDefault(); } return okToSubmit; } function snapIgnoreKey(eventOb) { var ignore= false; if (eventOb && (eventOb.type.toLowerCase()=="keypress") && (eventOb.keyCode != null)) { if ((eventOb.keyCode!=32) && (eventOb.keyCode!=10)) { ignore = true; if (eventOb.charCode!=null) { if ((eventOb.charCode==32) || (eventOb.charCode==10)) ignore = false; } } } return ignore; } // Page navigation function snapEvalShowPage(Pagenum, force) { var postponedItems = new Array(); //lengthy fix for bug in opera9 var somethingToShow=snapEvalPageRouting(Pagenum, postponedItems); if(somethingToShow || force) { snapShowPage(Pagenum); for (var name in postponedItems) { snapEvalAskedFor(name); } } postponedItems = null; return somethingToShow; } // Page navigation function snapNextPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; if (eventOb && eventOb.preventDefault) eventOb.preventDefault(); var somethingToShow=false; var nextPage=pageNumber; while(nextPage<lastPageNumber && !somethingToShow && snapPageValidationOk(nextPage)) { nextPage++; somethingToShow=snapEvalShowPage(nextPage, nextPage==lastPageNumber); } return false; } // Page navigation function snapBackPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; if (eventOb && eventOb.preventDefault) eventOb.preventDefault(); var somethingToShow=false; var nextPage=pageNumber; while(nextPage>1 && !somethingToShow) { nextPage--; somethingToShow=snapEvalShowPage(nextPage, (nextPage==1)); } return false; } function snapPrint(eventOb) { if (snapIgnoreKey(eventOb)) return true; window.print(); } // Page navigation function snapResetPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; if (eventOb && eventOb.preventDefault) eventOb.preventDefault(); var aPage=snapMappedPage(pageNumber); if (pageContents[aPage]) { var changed = false; var pageItems = pageContents[aPage]; for(var i=0; i<pageItems.length; i++) { var controls = snapObjectsByName(pageItems[i]); if (controls && controls.length > 0) { for(var j=0; j<controls.length; j++) { var elem = controls[j]; if (elem && elem.tagName != null) { var lTagName = elem.tagName.toLowerCase(); if (lTagName=="input") { if ((elem.type!= null) && (elem.type.toLowerCase() == 'text')) { if (elem.value && elem.value!="") { elem.value = ""; changed = true; } } else if (elem.checked) { elem.checked = false; changed = true; } } else if (lTagName=="textarea") { if (elem.value && elem.value!="") { elem.value = ""; changed = true; } } else if (lTagName=="select") { if (elem.selectedIndex != null) { elem.selectedIndex = 0; } for (var op = 0; op < elem.options.length; op++) { if (elem.options[op].value > 0 && elem.options[op].selected) { elem.options[op].selected = false; changed = true; } } } } } } } if (changed) { snapApplyInitialSubstitutions(); resetRouting(); snapEvalPageRouting(); } } return false; } function snapResetAll(eventOb) { if (snapIgnoreKey(eventOb)) return true; document.forms["SnapForm"].reset(); snapApplyInitialSubstitutions(); resetRouting(); snapEvalPageRouting(); snapShowPage(1); } // Page navigation function snapShowPage(target) { if (target>=1 && target<=lastPageNumber) { snapInclude(snapObject("p_p"+snapMappedPage(pageNumber)), false); snapInclude(snapObject("p_p"+snapMappedPage(target)), true, 'block'); pageNumber=target; snapFocusPage(pageNumber); } if(lastPageNumber>0) { // buttons ------------------------------------- // one snapInclude per button, with condition set acccording to user selection for (var butn in showButtonOptions) { snapIncludeBtn(snapObject(butn), eval(showButtonOptions[butn])); } // progress bar ------------------------------------- // can be left in always. Variable 'pBars' indicates number of images progress=snapObject("b_progress"); if (progress) { var progText = ""; if (progress.tagName != null && progress.tagName.toLowerCase()=="span") { progress.firstChild.nodeValue = progText; } else { if(progress.src) { var file=pbRatio(pBars); progress.src=progress.src.replace(/\d{2}\.gif/, file+".gif"); } progress.alt=progText; } } } } function snapFocusPage(page) { var found = false; page=snapMappedPage(page); if(page>=1 && page<=lastPageNumber) { if (pageContents[page]) { var pageItems = pageContents[page]; for(var j=0; j<pageItems.length && !found; j++) { if (getAsked(pageItems[j])) { var code =0; var codeOb= null; do { code++; codeOb = snapObject(pageItems[j]+'_'+code); if (codeOb) { try { found = true; codeOb.focus(); } catch (e)//hidden control { found = false; } } } while (!found && codeOb != null) } } } if (window.scrollTo) { window.scrollTo(0,0); }else if (window.scroll) { window.scroll(0,0); } } } function snapShowQuestion(name) { var control = snapObject(name + "_1"); if (control) control.focus(); var tab = snapObject(name); if (tab) { var offset = findObjY(tab); if (window.scrollTo) { window.scrollTo(0,offset); }else if (window.scroll) { window.scroll(0,offset); } } } function findObjY(obj) { var curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent; } } else if (obj.y) curtop = obj.y; return curtop; } // Page navigation // Invalidate Routing cache for dependents of 'question' function snapUndoRoutingFor(name) { if (name && dependents[name]) { var undo=dependents[name]; for (var i=0; i<undo.length; i++) { var thisVar = undo[i]; if (askedCache[thisVar]!=null) delete askedCache[thisVar]; if (snapIsGrid(thisVar)) { var gridOwner = thisVar; if(gridFirstList[thisVar]!=null) { gridOwner=gridFirstList[thisVar]; } gridOwner += "_GRID"; if (askedCache[gridOwner]!=null) delete askedCache[gridOwner]; } } } } function resetRouting() { for (var x in askedCache) delete askedCache[x]; } // Page navigation // recalculate routing for this given page (or current page if aPage==null) function snapEvalPageRouting(aPage, postponedItems) { var somethingShown=false; if (aPage==null) aPage=pageNumber; aPage=snapMappedPage(aPage); if (aPage>=1 && aPage<=lastPageNumber && pageContents[aPage]) { var pageItems=pageContents[aPage]; for (var i=0; i<pageItems.length; i++) { if(snapEvalAskedFor(pageItems[i], postponedItems)) { somethingShown=true; } } } return somethingShown; } // Page navigation function snapIsPageIncluded(p) { } //////////////////////////////////////////////////////////////////////////////// // Text substitution function snapApplyInitialSubstitutions() { var all_span = snapObjectsByTagName('span'); var i; for(i=0;i<all_span.length;i++) { if(all_span[i].id) { var pos = all_span[i].id.indexOf("_reply"); if (pos > 0) { var questionName=all_span[i].id.substr(0, pos); if(questionName && snapObject(questionName)) all_span[i].firstChild.nodeValue=snapVarReply(questionName); } } } } // Text substitution function snapSubstituteText(questionName) { if (textSubLookup == null) { textSubLookup = new Array(); var all_span = snapObjectsByTagName('span'); var i; for(i=0;i<all_span.length;i++) { if(all_span[i].id) { var nameLen = all_span[i].id.indexOf('_reply'); if (nameLen > 0) { var newName = all_span[i].id.substr(0, nameLen); if (textSubLookup[newName] == null) { textSubLookup[newName] = new Array(); } var subList = textSubLookup[newName]; subList[subList.length] = all_span[i]; } } } } if (textSubLookup[questionName] != null) { var subList = textSubLookup[questionName]; var i; for(i=0;i<subList.length;i++) { if(subList[i].id && (0 == subList[i].id.indexOf(questionName+'_reply'))) { subList[i].firstChild.nodeValue=snapVarReply(questionName); } } } } // Value substitution function snapEvalTotals(name) { var expr=totalList[name]; if(expr!=null) eval(expr); } // Value substitution function totalise() { var i=0, j=0, sum=0, varFloat=0, blank=true, isZero=false, varString='', srcVar, tarVar; var lastValues = new Array(); var allowNegs=arguments[arguments.length-3]; // allow negative responses var roundNums=arguments[arguments.length-2]; // round numbers up/down var cleanNum=arguments[arguments.length-1]; // clean data: delete non-numeric chars or delete invalid num for (i=0; i<arguments.length-4; i++) // loop source variables, edit and add to sum { varString = snapVarReply(arguments[i]); if (cleanNum) varString = cleanNumber(varString, allowNegs); // clean data if (roundNums) varString = '' + Math.round(parseFloat(varString)); // round number and cast back to string varFloat = parseFloat(varString); if ((!allowNegs && varFloat < 0) || isNaN(varFloat)) // delete invalid number { varString=''; varFloat=0; } sum += varFloat; // add to running total if (varString == '0') isZero=true; // If source var is '0' the total should display '0' not '' if (varString != '') blank=false; // If all source vars are blank total should be blank } if(blank) sum=''; else sum=''+sum; if(snapIsOpen(arguments[arguments.length-4])) snapSetOpenReply(arguments[arguments.length-4], sum); } // Value substitution function cleanNumber(varString, allowNegs) { var newVarString = ""; if(allowNegs) newVarString=varString.replace(/^[^+\-0~9]*([+\-]?\d*\.?\d*).*$/, '$1'); else newVarString=varString.replace(/^[^+0~9]*(\+?\d*\.?\d*).*$/, '$1'); return newVarString; } //////////////////////////////////////////////////////////////////////////////// // Variable display function snapInclude(obj, show, val) { var changed = false; if (obj) { if (val == null) { val = ''; } if (!show) { val = 'none'; } if (obj.style.display!=val) { obj.style.display = val; changed = true; } } return changed; } function snapIncludeBtn(obj, show, val) { snapInclude(obj, show, val); if (obj && obj.parentNode) { var bParent = obj.parentNode; if (bParent && bParent.tagName && ("a" == bParent.tagName.toLowerCase())) { snapInclude(bParent, show, val); } } } function snapHide(obj, show) { if (obj) { obj.style.visibility=show?'visible':'hidden'; } } // Variable display function snapIsIncluded(obj) { var result=false; if (obj) result=(obj.style.display!='none'); return result; } //////////////////////////////////////////////////////////////////////////////// // Rotation function snapRotateGrid(questionList, rotationType) { var aCode; var questions = questionList.split(','); var questionNodes=new Array(); var i, j; var overallParent; var overallOk=true; for(i=0;i<questions.length;i++) { var nodes=snapObject(questions[i]+"_1"); questionNodes[i]=snapObject(questions[i]+"_1"); for(j=0;j<2;j++) { if(questionNodes[i]) questionNodes[i]=questionNodes[i].parentNode; } if(questionNodes[i]) { if(i==0) { overallParent=questionNodes[i].parentNode; if(!overallParent) { overallOk=false; } } else if(overallParent!=questionNodes[i].parentNode) { overallOk=false; } } else { overallOk=false; } } if(overallOk) { var newOrder=snapRotationOrder(questions.length, rotationType) for(i=0;i<questions.length;i++) overallParent.appendChild(questionNodes[newOrder[i]-1]); } } // Rotation function snapRotationOrder(numCodes, rotationType) { var codeList=new Array(numCodes); var i, j; var newCodeNum; for(i=0;i<numCodes;i++) codeList[i]=i+1; if(rotationType=='random') { for(i=0;i<numCodes;i++) { do { newCodeNum=Math.round(Math.random()*numCodes); } while(newCodeNum<0 || newCodeNum>=numCodes); j=codeList[i]; codeList[i]=codeList[newCodeNum]; codeList[newCodeNum]=j; } } else if(rotationType=='inverse') { if(Math.random()>=0.5) { for(i=0;i<numCodes;i++) codeList[i]=numCodes-i; } } else if(rotationType=='forwards' || rotationType=='backwards') { j=Math.round(Math.random()*numCodes); for(i=0;i<numCodes;i++) codeList[i]=(i+j)%numCodes+1; } return codeList; } // Rotation function findArrayValue(array, value) { var i; for(i=0;i<array.length;i++) { if(array[i]==value) return i; } return null; } // Rotation function snapRotateCodesDropdown(question, numCodes, rotationType) { var aCode=snapObject(question+"_1"); if(aCode && aCode.childNodes) { if(numCodes>=aCode.childNodes.length) numCodes=aCode.childNodes.length-1; var targetOrder=snapRotationOrder(numCodes, rotationType); var minCode=aCode.childNodes.length; for(var i=0; i<numCodes; i++) { for(var j=0;j<aCode.childNodes.length;j++) { if(aCode.childNodes[j].value==targetOrder[i]) { if(minCode>j) minCode=j; aCode.appendChild(aCode.childNodes[j]); j=aCode.childNodes.length; } } } i+=minCode; while(i<aCode.childNodes.length && minCode>=0 && minCode<aCode.childNodes.length) { aCode.appendChild(aCode.childNodes[minCode]); i++; } } } // Rotation function snapRotateCodes(question, numCodes, rotationType) { if(snapIsDropdown(question)) { snapRotateCodesDropdown(question, numCodes, rotationType); } else { var i, j, k; var aCode, aCodeNum, aParent; var newCode, newCodeNum, newParent; var targetOrder=snapRotationOrder(numCodes, rotationType); var actualOrder=new Array(numCodes); for (i=0; i<numCodes; i++) actualOrder[i]=i+1; for (i=0; i<numCodes; i++) { aCodeNum=actualOrder[i]; newCodeNum=targetOrder[i]; if (aCodeNum != newCodeNum) { j=findArrayValue(actualOrder, newCodeNum); aCode=snapObject(question+"c"+aCodeNum); newCode=snapObject(question+"c"+newCodeNum); if (aCode == null) aCode=snapObject(question+"_"+aCodeNum); if (newCode == null) newCode=snapObject(question+"_"+newCodeNum); if(aCode && aCode.parentNode && newCode && newCode.parentNode) { k=actualOrder[i]; actualOrder[i]=actualOrder[j]; actualOrder[j]=k; snapSwapObs(aCode, newCode); snapSwapObs(snapObject(question+"g"+aCodeNum), snapObject(question+"g"+newCodeNum)); snapSwapObs(snapObject(question+"v"+aCodeNum), snapObject(question+"v"+newCodeNum)); } } } } } function snapSwapObs(aCode, newCode) { if(aCode && newCode) { var aParent=aCode.parentNode; var newParent=newCode.parentNode; if (aParent &&newParent) { aParent.removeChild(aCode); newParent.removeChild(newCode); aParent.appendChild(newCode); newParent.appendChild(aCode); } } } //////////////////////////////////////////////////////////////////////////////// // Variable No Reply function snapIsNoReply(question) { return snapVarReply(question)=="(no reply)"; } // Variable No Reply function snapForceReply(question, realName) { var result=true; if(asked(question) && snapIsNoReply(question)) { alert("Please provide an answer for question "+realName+"."); result=false; snapShowQuestion(question); } return result; } function snapPageValidationOk(page) { var result=true; page=snapMappedPage(page); if(page>=1 && page<=lastPageNumber && pageContents[page]) { var pageItems = pageContents[page]; for(var j=0; j<pageItems.length && result; j++) { var question = pageItems[j]; if(validateList[question]!=null) { if (asked(question)) {result=eval(validateList[question]); } } if(result && (forceReply[question]!=null)) { result=snapForceReply(question, forceReply[question]); } } } return result; } function doAutoAns(varName) { if (null != codeMaskList[varName]) { var numCodes=snapNumCodes(varName); var autoReplies=0; var selObj = null; if (snapIsDropdown(varName)) selObj = snapObject(varName+'_1'); var changed = false; for(var i=1;i<=numCodes;i++) { var expr=codeMaskList[varName].replace(/code/g, i); var showThisCode=eval(expr); if (selObj && selObj.options) { var found = false; for (var x = 0; x < selObj.options.length && !found; x++) { if (selObj.options[x].value == i) { found = true; if (selObj.options[x].selected != null) { if (showThisCode != selObj.options[x].selected) { changed = true; selObj.options[x].selected = showThisCode; } } } } } else { var codeOb = snapObject(varName+'_'+i); if (codeOb && codeOb.checked != null) { if (showThisCode != codeOb.checked) { changed = true; codeOb.checked = showThisCode; } } } } if (changed) snapOnChange(varName); } } //////////////////////////////////////////////////////////////////////////////// // Variable Not Asked function snapEvalAskedFor(v, postponedItems) { var somethingShown=true; var isGrid = snapIsGrid(v); var changed = false; if(askedCalc[v] || codeMaskList[v]) { var ask=asked(v); ask=(ask==null || ask); askedCache[v]=ask; somethingShown=ask; if(isGrid) { var gridLine=snapObject(v+'_1'); while(gridLine!=null && (gridLine.tagName==null || gridLine.tagName.toLowerCase()!='tr')) gridLine=gridLine.parentNode; if(gridLine!=null) { snapInclude(gridLine, ask); } var gridOwner=v; if(gridFirstList[v]!=null) { gridOwner=gridFirstList[v]; snapInclude(snapObject(v+'_SPACER'), ask); } var gridName = gridOwner +"_GRID" if(askedCalc[gridName]) { var ask=asked(gridName); snapInclude(snapObject(gridName), ask); snapInclude(snapObject(gridOwner+'_SPACER'), ask); somethingShown=ask; } } else { if (snapInclude(snapObject(v), ask)) changed = true; snapInclude(snapObject(v+'_SPACER'), ask); } if (!ask && doAutoAnsList[v]) { doAutoAns(v); } } if(somethingShown && codeMaskList[v]) { var isCombo = snapIsDropdown(v); var numCodes=snapNumCodes(v); var i; var showThisCode; somethingShown=false; for(i=1;i<=numCodes;i++) { var expr=codeMaskList[v].replace(/code/g, i); showThisCode=eval(expr); if (isCombo) { if (snapIncludeCombo(v, i, showThisCode, postponedItems)) changed = true; } else { var codeObject = snapObject(v+'c'+i); var codeBox = snapObject(v+'_'+i); if(codeObject ) snapInclude(codeObject, showThisCode); else snapInclude(codeBox, showThisCode); snapHide(snapObject(v+'g'+i), showThisCode); snapHide(snapObject(v+'v'+i), showThisCode); if (!showThisCode) { if (codeBox && (codeBox.checked)) { codeBox.checked = false; changed = true; } } } if(showThisCode) somethingShown=true; } } if (changed) snapOnChange(v); return somethingShown; } function snapIncludeCombo(name, code, showThisCode, postponedItems) { var changed = false; var selOb = snapObject(name + '_1'); if (selOb && selOb.options && (cacheSelectOptions.splice!=null)) { var found = false; if (showThisCode) { var removedList = cacheSelectOptions[name]; if (removedList) { for (var i =0; i < removedList.length && !found; i++) { if (removedList[i].value != null && removedList[i].value == code) { found = true; if (postponedItems) { postponedItems[name] = true; } else { var option = removedList[i]; removedList.splice(i, 1); var pos = null; for (var j =0; j < selOb.options.length && (null == pos); j++) { if (selOb.options[j].value > option.value || (selOb.options[j].value ==0 && selOb.options[j].text=="")) { pos = selOb.options[j]; } } selOb.insertBefore(option, pos ); } } } } } else { for (var i =0; i < selOb.options.length && !found; i++) { if (selOb.options[i].value == code) { found = true; if (selOb.options[i].selected) { changed = true; try{ selOb.options[i].selected = false; }catch(e) {//ie 6 bug? } } if (postponedItems) { postponedItems[name] = true; } else { var option = selOb.options[i]; selOb.removeChild(option); if (!cacheSelectOptions[name]) cacheSelectOptions[name] = new Array(); cacheSelectOptions[name].push(option); } } } } } return changed; } //////////////////////////////////////////////////////////////////////////////// // Variable exclusive function snapCheckExclusiveOf(object) { if (object.checked && object.name && exclusive[object.name] && object.id) { var changed = false; var c; var excl=exclusive[object.name]; var code=parseInt(object.id.substr(object.id.indexOf('_')+1), 10); var isExclusive=false; for (c=0; c<excl.length && !isExclusive; c++) { if (excl[c]==code) isExclusive=true; } if (isExclusive) { var codeList=snapObjectsByName(object.name); for (c=0; c<codeList.length; c++) { if (object!=codeList[c] && codeList[c].checked) { codeList[c].checked=false; changed = true; } } } else { for (c=0; c<excl.length; c++) { code=snapObject(object.name+'_'+excl[c]); if (code && code.checked) { code.checked=false; changed = true; } } } if (changed) { snapOnChange(object.name); } } } //////////////////////////////////////////////////////////////////////////////// // Variable type function snapNumCodes(question) { var result=cacheNumCodes[question]; if(result==null) { var testCombo = snapObject(question+"_"+1); if (testCombo && testCombo.tagName && testCombo.tagName.toLowerCase() == 'select') { result = testCombo.options.length - 1; } else { var c=1; result=0; while(snapObject(question+"_"+c)) { result=c; c++; } } cacheNumCodes[question]=result; } return result; } // Variable type function snapIsOpen(name) { var result=cacheIsOpen[name]; if(result==null) { result=false; var aCode; aCode=snapObject(name+'_1'); if(aCode!=null) result=(aCode.type=='text' || aCode.type=='textarea'); cacheIsOpen[name]=result; } return result; } // Variable type function snapIsClosed(name) { var result=cacheIsClosed[name]; if(result==null) { result=false; var aCode; aCode=snapObject(name+'_1'); if(aCode!=null) result=(aCode.type=='checkbox' || aCode.type=='radio' || aCode.type=='select-one' || aCode.type=='select-multiple'); cacheIsClosed[name]=result; } return result; } // Variable type function snapIsDropdown(name) { var result=cacheIsDropdown[name]; if(result==null) { result=false; var aCode; aCode=snapObject(name+'_1'); if(aCode!=null) result=(aCode.type=='select-one' || aCode.type=='select-multiple'); cacheIsDropdown[name]=result; } return result; } function snapObjectLabel(name, code) { var result=null; var all_labels = snapObjectsByTagName('label'); var i; if(gridFirstList[name]!=null) name=gridFirstList[name]; for(i=0;i<all_labels.length && result==null;i++) { if(all_labels[i].htmlFor && all_labels[i].htmlFor==name+'_'+code) { result=all_labels[i]; } } return result; } // Variable type function snapIsGrid(name) { var result=cacheIsGrid[name]; if(result==null) { result = false; if(gridFirstList[name]!=null) { result = true; } else { var posGridName = name+"_GRID"; if (null != snapObject(posGridName)) { result = true; } } cacheIsGrid[name]=result; } return result; } //////////////////////////////////////////////////////////////////////////////// // Variable response function snapVarReply(name) { var result="(no reply)"; if (asked(name)) { if(snapIsOpen(name)) result=snapOpenReply(name); else if(snapIsClosed(name)) result=snapClosedReply(name); } return result; } // Variable response function snapVarValue(name) { var result=""; var c=1; var code=snapObject(name+'_'+c); while(code) { if(code.options) { for (var i = 0; i < code.options.length; i++) { var thisOption=code.options[i]; if(thisOption!=null && thisOption.selected && thisOption.value!=null && thisOption.value.length>0) { if(result.length>0) result+=';'; result+=thisOption.value; } } } else { if((code.checked==null || code.checked) && code.value!=null && code.value.length>0) { if(result.length>0) result+=';'; result+=code.value; } } c++; code=snapObject(name+'_'+c); } return result; } // Variable response function snapClosedAns(name) { var result=null; if(asked(name)) { result=snapVarValue(name); } if(result==null) result=""; return result; } // Variable response function snapClosedReply(name) { var result="(no reply)"; var response=snapVarValue(name); if(response.length>0) { var responses=response.split(";"); var i; result=""; for(i=0;i<responses.length;i++) { if(i>0) { if(i<responses.length-1) result+=", "; else result+=" and "; } result += snapCodeLabel(name, responses[i]); } } return result; } // Variable response function snapCodeLabel(name, code) { var result=code; if(snapIsDropdown(name)) { var labelNode=snapObject(name+'_1'); var i; for(i=0;i<labelNode.childNodes.length;i++) { if(code==labelNode.childNodes[i].value && labelNode.childNodes[i].firstChild!=null) result=labelNode.childNodes[i].firstChild.nodeValue; } } else { var all_labels = snapObjectsByTagName('label'); var i; if(gridFirstList[name]!=null) name=gridFirstList[name]; for(i=0;i<all_labels.length;i++) { if(all_labels[i].htmlFor && all_labels[i].htmlFor==name+'_'+code) { if (all_labels[i].innerText) result=all_labels[i].innerText; else if (all_labels[i].textContent ) result=all_labels[i].textContent; else if (all_labels[i].firstChild && (null != all_labels[i].firstChild.nodeValue)) result=all_labels[i].firstChild.nodeValue; else if (all_labels[i].innerHTML) result=all_labels[i].innerHTML; } } } return result; } // Variable response function snapOpenAns(name) { var reply="" if(asked(name)) { var glovar=snapObject(name+'_1'); if(glovar != null && glovar.value!=null) reply=glovar.value; } return reply; } // Variable response function snapOpenReply(name) { var reply=""; var glovar=snapObject(name+'_1'); if(glovar != null) { reply=glovar.value; if(reply!=null) { while(reply.length>0 && reply.charAt(reply.length-1)==' ') reply=reply.substr(0, reply.length-1); while(reply.length>0 && reply.charAt(0)==' ') reply=reply.substr(1, reply.length-1); } } if(reply==null || reply.length==0) reply="(no reply)"; return reply; } // Variable response function snapSetOpenReply(name, value) { var glovar=snapObject(name+'_1'); if(glovar != null && glovar.value!=null) glovar.value=value; } // Variable response function snapChangeMade(arg) { var origin = snapEventOrigin(arg); if (origin) { snapCheckValueOf(origin); snapOnChange(origin.name); } } function snapOnChange(name) { if (name) { snapUndoRoutingFor(name); snapResponse(name); snapEvalTotals(name); snapSubstituteText(name); snapEvalPageRouting(); } } // Variable response // Check syntax of open-ended variables / check exclusive code settings for others function snapCheckValueOf(object) { var typename = object.type.toLowerCase(); if (typename=='checkbox' || typename =='radio') snapCheckExclusiveOf(object); else if ((object.tagName != null) && (object.tagName.toLowerCase()=='select')) snapSelectExclusiveOf(object); } function snapSelectExclusiveOf(object) { if (object.name && exclusive[object.name] && object.id) { try{ nota_dd(object, exclusive[object.name]); }catch(e){//nota_dd may not exist } } } // Variable response function snapResponse(name) { var reply=''; var code; var i; if (codeLabels[name]) { var labels=eval('new Array('+codeLabels[name]+')'); var xref=new Array(); var x=0; for (i=0, x=0; i<labels.length; i++) { code=snapObject(name+'_'+(i+1)); if (code && code.checked) xref[x++]=i; } if (xref.length>0) { reply=labels[xref[0]]; if (xref.length>1) { for (i=1; i<xref.length-1; i++) reply = reply+', '+labels[xref[i]]; reply = reply+' and '+labels[xref[i]]; } } } else { code=snapObject(name+'_1'); if (code) reply=code.value; } if (reply.length) { var places=snapObjectsByName(name+'_reply'); for (i=0; i<places.length; i++) { places[i].firstChild.nodeValue=reply; } } } //////////////////////////////////////////////////////////////////////////////// // Used by snapparj function getAsked(name) { var isAsked = true; if(!name || name=="") { isAsked=false; } else if(askedCalc[name]) { isAsked=eval(askedCalc[name]); } if (isAsked && (null != codeMaskList[name])) { var numCodes=snapNumCodes(name); var autoReplies=0; if (autoAnsList[name]) { doAutoAnsList[name] = false; autoReplies = autoAnsList[name]; } var showing = 0; for(var i=1;i<=numCodes && (showing <= autoReplies);i++) { var expr=codeMaskList[name].replace(/code/g, i); var showThisCode=eval(expr); if (showThisCode) showing++; } if (showing <= autoReplies) { isAsked = false; if (autoReplies > 0) doAutoAnsList[name] = true; } } return isAsked; } // Used by snapparj function asked(name) { if (null == askedCache[name]) { askedCache[name]=getAsked(name); } return askedCache[name]; } // Used by snapparj function noreply(name) { var isNR = false; if (asked(name)) { if (ans(name) == "") { isNR = true; } } return isNR; } // Used by snapparj function ans(name) { var answer=""; if(snapIsOpen(name)) answer=snapOpenAns(name); else if(snapIsClosed(name)) answer=snapClosedAns(name); return answer; } // Used by snapparj function ansAsNum(name) { return parseFloat(ans(name)); } // Used by snapparj function cVR(name,value) { var result=false; if (asked(name)) { var glovar=snapObject(name); if(glovar != null) { var testValue=snapVarValue(name); if((";"+testValue+";").indexOf(";"+value+";")>=0) { result=true; } } } return result; } // Used by snapparj function cVV(name1,name2) { var result=false; if (asked(name1) && asked(name2) && !noreply(name1) && !noreply(name2)) { var r1=";"+ans(name1)+";"; var r2=";"+ans(name2)+";"; while(r2.length>2&&!result) { var i=r2.substring(1).indexOf(";")+1; if(r1.indexOf(r2.substring(0,i+1))>=0) result=true; else r2=r2.substring(i); } } return result; } // Used by snapparj function cVM(name)//(, ...) { var result=false; var numArgs = arguments.length; if ((1 < numArgs) && asked(name)) { if (snapIsClosed(name)) { if (snapIsDropdown(name)) { var control = snapObject(name + '_1'); if (control && (control.options != null)) { if (control.type.toLowerCase()=='select-one') { if (control.options[control.selectedIndex] != null) { var val = control.options[control.selectedIndex].value; if (val > 0) { for (var i = 1; (i < numArgs) && !result; i++) { result = (val == arguments[i]); } } } }else { for (var opt = 0; !result && (opt < control.options.length); opt++) { if (control.options[opt].selected && (control.options[opt].value>0)) { var val = control.options[opt].value; for (var i = 1; (i < numArgs) && !result; i++) { result = (val == arguments[i]); } } } } } }else { for (var i = 1; (i < numArgs) && !result; i++) { var requiredCode = snapObject(name + '_' + arguments[i]); if ((null != requiredCode) && (null != requiredCode.checked)) { result = (requiredCode.checked == true); } } } }else { var answer = ans(name); if (answer!="") { answer = ";"+answer+";"; for (var i = 1; (i < numArgs) && !result; i++) { if (0 <= answer.indexOf(";"+arguments[i]+";")) { result = true; } } } } } return result; } // Used by snapparj function cInRange(value, minValue, maxValue) { var result=(value!=null && (maxValue!=NaN) && (minValue!=NaN) && (value>=minValue && value<=maxValue)||(value>=maxValue && value<=minValue)); return result; } //////////////////////////////////////////////////////////////////////////////// function codeReply(name,nameCodes) { var reply=""; var glovar=snapObject(name); if(glovar != null) { var first=true; var mValue=glovar.value+";"; while(mValue.length>1) { var cPos=mValue.indexOf(";"); if(!first) { if(cPos==mValue.length-1) reply+=" and "; else reply+=", "; } reply+=nameCodes[parseInt(mValue.substring(0,cPos), 10)-1]; first=false; mValue=mValue.substring(cPos+1); } } if(reply.length==0) reply="(no reply)"; return reply; } //////////////////////////////////////////////////////////////////////////////// // Timer function fStartTimer(uk) { if (!timerStarted) { startPoint = new Date(); var hours = startPoint.getHours(); var mins = "00" + startPoint.getMinutes(); var timeValue = ""+hours+":"+mins.substr(mins.length - 2); var days = startPoint.getDate(); var months = startPoint.getMonth() + 1; var years = "00" + startPoint.getYear().toString(); years = years.substr(years.length - 2); var dateValue; if (uk) dateValue = days + "/" + months + "/" + years; else dateValue = months + "/" + days + "/" + years; snapSetOpenReply("0", timeValue); snapSetOpenReply("0", dateValue); timerStarted = true; } } // Timer function fEndTimer() { if (timerStarted) { endPoint = new Date(); var hours = endPoint.getHours(); var mins = "00" + endPoint.getMinutes(); var timeValue = ""+hours+":"+mins.substr(mins.length - 2); var durationValue=((endPoint - startPoint) / 60000); snapSetOpenReply("0", timeValue); snapSetOpenReply("0", durationValue); if (snapObject("0_1")) { var days = endPoint.getDate(); var months = endPoint.getMonth() + 1; var years = "00" + endPoint.getYear().toString(); years = years.substr(years.length - 2); var dateValue; if (1)//true=uk,false=usa dateValue = days + "/" + months + "/" + years; else dateValue = months + "/" + days + "/" + years; snapSetOpenReply("0", dateValue); } timerStarted = false; } } // Timer function getIndex(name,aDoc) { for(var c=0;c<aDoc.length;c++) { if(aDoc[c].name==name) return c; } return -1; } //////////////////////////////////////////////////////////////////////////////// // Progress Bar function pbRatio(OutOf) { var result=1; if (pageNumber >= lastPageNumber) result = OutOf; else if (pageNumber <= 1) result =1; else if (OutOf <= 2) result = Math.round(OutOf*pageNumber/lastPageNumber); else result = 2 + Math.floor((OutOf-2)*(pageNumber-1)/(lastPageNumber-1)); if (1>result) result="01"; else if (10 > result) result = "0" + result; else result = "" + result; return result; } //////////////////////////////////////////////////////////////////////////////// // Validation function isValidNum(name,allowNegatives,realName) { var isValid=true; var locVar=snapObject(name); if (locVar != null) { var numstr=locVar.value; if (allowNegatives+""=="undefined" || allowNegatives+""=="null") allowNegatives = true; numstr+=""; for(var i=0;i<numstr.length;i++) { if (!((numstr.charAt(i)>="0")&&(numstr.charAt(i)<="9")||((numstr.charAt(i)==".")&&(numstr.charAt(i+1)!="."))||(numstr.charAt(i)=="-"))) isValid=false; else if((numstr.charAt(i)=="-"&&i!=0)||(numstr.charAt(i)=="-"&&!allowNegatives)) isValid=false; } if(!isValid) { locVar.focus(); alert("Please enter a valid number for question "+realName+"."); } } return isValid; } // Validation function RangeCheck(name,realName,min,max,UiCode) { var isValid=true; var locVar=snapObject(name); if (locVar != null) { var numstr=""+locVar.value; if (0 < numstr.length) { var number = parseFloat(numstr); if(number<min || number>max || isNaN(number)) { isValid = false; locVar.focus(); if ((1 == UiCode) && (min!=max)) { alert("Please give an answer between "+min+" and "+max+" for question "+realName+"."); } else if (0 != UiCode) { alert("Please enter a valid number for question "+realName+"."); } } } } return isValid; } // Validation function DateRange(name,realName,min,max,UiCode) { var varDate = getVarDate(name,realName); var isValid = ("invalid" != varDate); if(isValid && ("" != varDate)) { if((varDate.getTime() < min.getTime())||(varDate.getTime() > max.getTime())) { isValid = false; var locVar=snapObject(name); if (locVar != null) { locVar.focus(); } if ((1 == UiCode) && (min.getTime()!=max.getTime())) { alert("Please give an answer between "+FormatDate(min)+" and "+FormatDate(max)+" for question "+realName+"."); } else if (0 != UiCode) { alert("You've entered an invalid date or date format for question "+realName+".\n"); } } } return isValid; } // Validation function getVarDate(name,realName) { var indate=""; var locVar = snapObject(name); if (locVar != null) indate=locVar.value; if(indate==null || indate.length==0) return ""; var punct; if(indate.indexOf(".")!=-1) punct="."; else if(indate.indexOf("-")!=-1) punct="-"; else punct="/"; var day; var month; var year; var warningMessage; if (1)//true=uk,false=usa { day=indate.substring(0,indate.indexOf(punct)); month=indate.substring(indate.indexOf(punct)+1,indate.lastIndexOf(punct)); warningMessage = "Please use the DD/MM/YY format."; } else { month=indate.substring(0,indate.indexOf(punct)); day=indate.substring(indate.indexOf(punct)+1,indate.lastIndexOf(punct)); warningMessage = "Please use the MM/DD/YY format."; } year=indate.substring(indate.lastIndexOf(punct)+1,indate.length); month = getMonthName(month-1); if (year.length == 2) { if (30 > parseInt(year, 10)) { year = "20"+year; } else { year = "19"+year; } } if (month=="" || year.length != 4 || parseInt(day, 10) > 31) { locVar.focus(); alert("You've entered an invalid date or date format for question "+realName+".\n"+warningMessage); return "invalid"; } if (day.length == 1) day = "0" + day; var varDate = new Date(Date.parse(month + " " + day + ", " + year)); var cmpDate1 = day + "/" + month + "/" + year; var month2 = getMonthName(varDate.getMonth()); day = varDate.getDate(); if (day.toString().length == 1) { day = "0" + day; } var cmpDate2 = day + "/" + month2 + "/" + varDate.getFullYear(); if (cmpDate1 != cmpDate2) { locVar.focus(); alert("You've entered an invalid date or date format for question "+realName+".\n"+warningMessage); return "invalid"; } return varDate; } // Validation function isValidDate(name,realName) { var varDate = getVarDate(name,realName); return ("invalid" != varDate); } // Validation function TimeRange(name,realName,min,max,UiCode) { var varTime = getVarTime(name,realName); var isValid = ("invalid" != varTime); if(isValid && ("" != varTime)) { if((varTime.getTime() < min.getTime())||(varTime.getTime() > max.getTime())) { isValid = false; var locVar = snapObject(name); if (locVar != null) locVar.focus(); if ((1 == UiCode) && (min.getTime()!=max.getTime())) { alert("Please give an answer between "+FormatTime(min)+" and "+FormatTime(max)+" for question "+realName+"."); } else if (0 != UiCode) { alert("You've entered an invalid time or time format for question "+realName+".\n"); } } } return isValid; } // Validation function getVarTime(name,realName) { var intime=""; var locVar = snapObject(name); if (locVar != null) intime=locVar.value; if(intime.length==0) return ""; var punct; if(intime.indexOf(".")!=-1) punct="."; else if(intime.indexOf("-")!=-1) punct="-"; else punct=":"; var hour = "00"; var minute = "00"; var second = "00"; var times = intime.split(punct); if(times.length >= 1) hour = times[0]; if(times.length >= 2) minute = times[1]; if(times.length >= 3) second = times[2]; if(parseInt(hour, 10) > 23 || parseInt(minute, 10) > 59 || parseInt(second, 10) > 59) { locVar.focus(); alert("You've entered an invalid time or time format for question "+realName+".\n"+"Please use the hh:mm:ss format."); return "invalid"; } if (hour.length == 1) hour = "0" + hour; if (minute.length == 1) minute = "0" + minute; if (second.length == 1) second = "0" + second; var varTime = new Date(Date.parse("1/1/1970 " + hour + ":" + minute + ":" + second)); var cmpTime1 = hour + ":" + minute + ":" + second; hour = varTime.getHours(); minute = varTime.getMinutes(); second = varTime.getSeconds(); if (hour.toString().length == 1) hour = "0" + hour; if (minute.toString().length == 1) minute = "0" + minute; if (second.toString().length == 1) second = "0" + second; var cmpTime2 = hour + ":" + minute + ":" + second; if (cmpTime1 != cmpTime2) { locVar.focus(); alert("You've entered an invalid time or time format for question "+realName+".\n"+"Please use the hh:mm:ss format."); return "invalid"; } return varTime; } // Validation function AnswerRange(varName,realName,min, max) { var valid = true; var numCodes = snapNumCodes(varName); var count = 0; if (snapIsDropdown(varName)) { var control = snapObject(varName + '_1'); if (control && (control.options != null)) { for (var x = 0; (x < control.options.length); x++) { if (control.options[x].selected && (control.options[x].value>0)) { count++; } } } } else { for (var x=1; x <= numCodes; x++) { var codeOb = snapObject(varName + '_' + x); if (codeOb && (codeOb.checked)) { count++; } } } if (count < min) { valid = false; } else if (count > max) { valid = false; } if (!valid) { alert("Question "+realName+" requires between "+min+" and "+max+" replies."); } return valid; } // Validation function isValidTime(name,realName) { var varTime = getVarTime(name,realName); return ("invalid" != varTime); } // Validation function ValidationPattern(name,realName,pattern,patternName) { var Result=true; var indate=""; var locVar = snapObject(name); if (locVar != null) { indate=locVar.value; if(indate!=null && indate.length>0 && indate.search) { Result=(0<=indate.search(pattern)); if(!Result) { alert("You've entered an invalid "+patternName+" for question "+realName+"."); } } } return Result; } //masking function VarToNum(varName) { var result = 0; if (snapIsOpen(varName)) { var control = snapObject(varName + '_1'); if (control && (control.value != null)) { result = parseInt(control.value, 10); } } else if (snapIsDropdown(varName)) { var control = snapObject(varName + '_1'); if (control && (control.options != null)) { var ok = true; for (var x = 0; (x < control.options.length) && ok; x++) { if (control.options[x].selected) { if (0 == result) { result = control.options[x].value; } else { result = 0; ok = false; } } } } } else if (snapIsClosed(varName)) { var numCodes = snapNumCodes(varName); var ok = true; for (var x = 1; (x <= numCodes) && ok; x++) { var control = snapObject(varName + '_' + x); if (control && control.checked) { if (0 == result) { result = control.value; } else { result = 0; ok = false; } } } } if (0 == result) { result = NaN; } return result; } //////////////////////////////////////////////////////////////////////////////// // Date and Time function FormatDate(Date) { var dateString = ""; if (1) { dateString += Date.getDate()+"/"; dateString += (1 + Date.getMonth()); } else { dateString += (1 + Date.getMonth())+"/"; dateString += Date.getDate(); } dateString += "/" + Date.getYear(); return dateString; } // Date and Time function FormatTime(Time) { var timeString = ""; var tempStr = Time.getHours().toString(); if (tempStr.length == 1) tempStr = "0" + tempStr; timeString += tempStr + ":"; tempStr = Time.getMinutes().toString(); if (tempStr.length == 1) tempStr = "0" + tempStr; timeString += tempStr + ":"; tempStr = Time.getSeconds().toString(); if (tempStr.length == 1) tempStr = "0" + tempStr; timeString += tempStr; return timeString; } // Date and Time function GetToday() { var Now = new Date; var Today = new Date(Now.getYear(), Now.getMonth(), Now.getDate()); return Today; } // Date and Time function getMonthName(i) { var month = ""; switch (i) { case 0: month="January";break; case 1: month="February";break; case 2: month="March";break; case 3: month="April";break; case 4: month="May";break; case 5: month="June";break; case 6: month="July";break; case 7: month="August";break; case 8: month="September";break; case 9: month="October";break; case 10: month="November";break; case 11: month="December";break; } return month; } // Date and Time function GetNow() { var Now = new Date; Now.setFullYear(1970, 0, 1); return Now; } //////////////////////////////////////////////////////////////////////////////// // Code Rotation function getOrder(numCodes) { var arr=new Array(numCodes); var numbers=new Array(numCodes); var i = 0; for (i=0; i<numCodes; i++) { numbers[i]=i; } for (i=numCodes ; i > 0; i--) { var ran = Math.round(Math.random() * i); if (ran == i) ran = 0; arr[i -1] = numbers[ran]; //numbers.splice(ran, 1); for (j = ran; j< (i-1); j++) numbers[j] = numbers[j+1]; } return arr; } // Code Rotation function getRotatedOrder(numCodes, forwards) { var arr=new Array(numCodes); for (var i=0; i<numCodes; i++) { if (forwards) { arr[i]= (i - rotationKey)%numCodes; if (0 > arr[i]) arr[i] += numCodes; } else { arr[i]= (i + rotationKey)%numCodes; } } return arr; } // Code Rotation function getInvertedOrder(numCodes) { var arr=new Array(numCodes); var inverted = ((rotationKey%2) == 0); for (var i=0; i<numCodes; i++) { if (inverted) { arr[i]=(numCodes - i - 1); } else { arr[i]=i; } } return arr; } //////////////////////////////////////////////////////////////////////////////// function getLabel(labelArray, orderArray, code) { return labelArray[orderArray[code]]; } function getValue(orderArray, code) { var val = orderArray[code] + 1; var str = "" + val; return str; } //hide everything for load document.write("<style type='text/css'><!--\ndiv{display:none;}\n--><\/style>"); //--> <!-- if (document.createTextNode) { var temp = document.createTextNode(""); if (temp.removeChild != null) {document.write("<p id='snapIntro'>Please wait while the survey loads...<br><br><a href='http://www.snapsurveys.com/' target='_blank' title='visit SnapSurveys.com (opens a new window)'>Powered by SnapSurveys<\/a><\/p>"); } } //--> Anti-coagulation Chart: Timeliness from SUHT
Url
/suhtapps/Surveys/pctdischarge_anti_coag08.htm
pctdischarge08
Description
<!-- Hide from scriptless browsers snapAddEvent(window, 'load', snapInit); // Global settings var pageNumber=0; var lastPageNumber=0; var pBars=12; var h
Url
/suhtapps/Surveys/pctdischarge08.htm
portsmouth_hospitals_health_survey_08
Description
<!-- Hide from scriptless browsers snapAddEvent(window, 'load', snapInit); // Global settings var pageNumber=0; var lastPageNumber=0; var pBars=12; var hasSubmitted = false; var showButtons=true; var startPoint; var endPoint; var timerStarted = false; var allowStore=true; var g_subm = false; var objectsById=new Array(); var missingObjects=new Array(); var dependents=new Array(); var codeLabels=new Array(); var pageContents=new Array(); var askedCalc=new Array(); var askedCache=new Array(); var exclusive=new Array(); var forceReply=new Array(); var validateList=new Array(); var codeMaskList=new Array(); var autoAnsList=new Array(); var doAutoAnsList=new Array(); var gridFirstList=new Array(); var showButtonOptions=new Array(); var cacheNumCodes=new Array(); var cacheIsOpen=new Array(); var cacheIsClosed=new Array(); var cacheIsDropdown=new Array(); var cacheIsGrid=new Array(); var totalList=new Array(); var cacheSelectOptions=new Array(); var pageArray=null; var textSubLookup=null; //////////////////////////////////////////////////////////////////////////////// // System function snapInit() { snapQueryString(); lastPageNumber=snapCountNumPages(); for (var p=1; p<=lastPageNumber; p++) { snapInclude(snapObject('p_p'+p), false); } linkButton('b_next', snapNextPage); linkButton('b_back', snapBackPage); linkButton('b_submit', snapSubmitPage); linkButton('b_reset', snapResetPage); linkButton('b_restart', snapResetAll); linkButton('b_print', snapPrint); showButtonOptions['b_back']='pageNumber>=2&&pageNumber<=lastPageNumber'; showButtonOptions['b_reset']='pageNumber>=1&&pageNumber<=lastPageNumber'; showButtonOptions['b_print']='pageNumber>=1&&pageNumber<=lastPageNumber'; showButtonOptions['b_next']='pageNumber>=1&&pageNumber<=lastPageNumber-1'; showButtonOptions['b_submit']='pageNumber>=lastPageNumber&&pageNumber<=lastPageNumber'; // List off routing specifications by question id askedCalc['V60']='!(ans("V58")==ans("V59"))'; // List of variables that have one or more dependents dependents['V58']=new Array("V60"); dependents['V59']=new Array("V60"); // List of variables that have exclusive codes // List of variables that must be answered forceReply['V15']='Q1'; forceReply['V16']='Q2'; forceReply['V56']='Q3'; forceReply['V17']='Q4'; forceReply['V18']='Q5'; forceReply['V20']='Q6'; forceReply['V21']='Q7'; forceReply['V13']='Q8'; forceReply['V8']='Q9'; forceReply['V23']='Q10'; forceReply['V24']='Q11a'; forceReply['V26']='Q11b'; forceReply['V27']='Q11c'; forceReply['V28']='Q11d'; forceReply['V25']='Q12'; forceReply['V30']='Q13'; forceReply['V31']='Q14a'; forceReply['V34']='Q14b'; forceReply['V32']='Q14c'; forceReply['V33']='Q14d'; forceReply['V35']='Q15'; forceReply['V38']='Q17'; forceReply['V39']='Q19'; forceReply['V40']='Q20'; forceReply['V41']='Q21'; // Totalise Values // identify which questions are on each page pageContents[1]=new Array("V2","V57","V3","V53","V54","V15","V16","V56","V17","V18","V20","V21","V13","V8","V23","V24","V26","V27","V28","V25","V30","V31","V34","V32","V33","V35","V37","V49","V38","V51","V39","V40","V41","V46","V47","V48","V50","V42","V58","V59","V60","V52"); // check question responses when they change for(var i=1; i<=lastPageNumber; i++) { if (pageContents[i]) { var pageItems = pageContents[i]; for(var j=0; j<pageItems.length; j++) { snapHookEvents(pageItems[j]); } } } // List of variables with code rotation // List of grid variables with their first grid item gridFirstList['V26']='V24'; gridFirstList['V27']='V24'; gridFirstList['V28']='V24'; gridFirstList['V34']='V31'; gridFirstList['V32']='V31'; gridFirstList['V33']='V31'; for(var x in gridFirstList) { var gridName=gridFirstList[x]+"_GRID"; if(askedCalc[gridName]==null) askedCalc[gridName]="asked(\""+gridFirstList[x]+"\")"; askedCalc[gridName]+="||asked(\""+x+"\")"; } // List of variables that have a mask applied to their answers // Prepare the first page var pleaseWait = snapObject("snapIntro"); if (pleaseWait != null) { var aParent=pleaseWait.parentNode; if (aParent != null) { aParent.removeChild(pleaseWait); objectsById["snapIntro"] = null; } } snapApplyInitialSubstitutions(); snapInclude(snapObject('snapbuttons'), true, 'block'); snapInclude(snapObject('snapDiv'), true, 'block'); if (lastPageNumber > 1) snapInclude(snapObject('b_progress'), true); snapNextPage(); } function linkButton(name, func) { var button = snapObject(name); var done = false; if (button && button.parentNode) { var bParent = button.parentNode; if (bParent && bParent.tagName && ("a" == bParent.tagName.toLowerCase())) { done = true; snapAddEvent(bParent, 'keypress',func); snapAddEvent(bParent, 'click',func); } } if (!done) { snapAddEvent(button, 'click',func); } } function snapQueryString() { var query=unescape(location.search.substring(1)); var pairs=query.split("&"); for(var i=0; i<pairs.length;i++) { var pos=pairs[i].indexOf('='); if (pos>0) { var argName=pairs[i].substring(0,pos); var value=pairs[i].substring(pos+1); if ((argName=="id") || (argName=="u")) {snapSetOpenReply("0",value); } else if (argName=="p") {snapSetOpenReply("0",value); } else if (argName=="s") {snapSetOpenReply("0",value); } } } } function snapMappedPage(page) { if (pageArray != null) { if(page>=1 && page<=lastPageNumber) { page=pageArray[page]; } } return page; } // System function snapHookEvents(question) { var items = snapObjectsByName(question); var i; var item; for (i=0; i<items.length; i++) { item=items[i]; if (item.type) { if (item.type=='checkbox' || item.type=='radio') snapAddEvent(item, 'click', snapChangeMade); else if (item.type=='select-one' || item.type=='select-multiple') snapAddEvent(item, 'change', snapChangeMade); else if (item.type=='text' || item.type=='textarea') snapAddEvent(item, 'blur', snapChangeMade); } } } // System function snapAddEvent(obj, evType, fn) { var result=false; if (obj) { if (obj.attachEvent) { result=obj.attachEvent("on"+evType, fn); } else if (obj.addEventListener) { obj.addEventListener(evType, fn, true); result=true; } } return result; } // System function snapGlobalDoc() { return document.forms["SnapForm"].elements; } // System function snapObject(id) { var ret = objectsById[id]; if (ret == null) { if (missingObjects[id] == null) { ret = document.getElementById(id); if (ret == null) { missingObjects[id] = true; } objectsById[id] = ret; } } return ret; } // System function snapObjectsByName(name) { return document.getElementsByName(name); } // System function snapObjectsByTagName(tagName) { return document.getElementsByTagName(tagName); } // System function snapEventOrigin(arg) { if (arg.srcElement) return arg.srcElement; else if (arg.target) return arg.target; return null; } //////////////////////////////////////////////////////////////////////////////// // Page navigation function snapCountNumPages() { var Result=0; var p=1; while(snapObject('p_p'+p)) { Result=p; p++; } return Result; } function snapSubmitPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; var okToSubmit=false; if (!hasSubmitted && snapIsIncluded(snapObject('b_submit'))) { var somethingToShow=false; var nextPage=pageNumber; while(nextPage<=lastPageNumber && snapPageValidationOk(nextPage)) { nextPage++; if(nextPage<=lastPageNumber) { somethingToShow=snapEvalShowPage(nextPage, false); } } if(nextPage > lastPageNumber) { okToSubmit = true; hasSubmitted = true; snapShowPage(lastPageNumber); } if(nextPage<=lastPageNumber) { snapShowPage(nextPage); okToSubmit=false; } } if (okToSubmit) { fEndTimer(); } else if (eventOb) { if (eventOb.cancelBubble!=null) eventOb.cancelBubble = true; if (eventOb.returnValue!=null) eventOb.returnValue = false; if (eventOb.preventDefault) eventOb.preventDefault(); } return okToSubmit; } function snapIgnoreKey(eventOb) { var ignore= false; if (eventOb && (eventOb.type.toLowerCase()=="keypress") && (eventOb.keyCode != null)) { if ((eventOb.keyCode!=32) && (eventOb.keyCode!=10)) { ignore = true; if (eventOb.charCode!=null) { if ((eventOb.charCode==32) || (eventOb.charCode==10)) ignore = false; } } } return ignore; } // Page navigation function snapEvalShowPage(Pagenum, force) { var postponedItems = new Array(); //lengthy fix for bug in opera9 var somethingToShow=snapEvalPageRouting(Pagenum, postponedItems); if(somethingToShow || force) { snapShowPage(Pagenum); for (var name in postponedItems) { snapEvalAskedFor(name); } } postponedItems = null; return somethingToShow; } // Page navigation function snapNextPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; if (eventOb && eventOb.preventDefault) eventOb.preventDefault(); var somethingToShow=false; var nextPage=pageNumber; while(nextPage<lastPageNumber && !somethingToShow && snapPageValidationOk(nextPage)) { nextPage++; somethingToShow=snapEvalShowPage(nextPage, nextPage==lastPageNumber); } return false; } // Page navigation function snapBackPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; if (eventOb && eventOb.preventDefault) eventOb.preventDefault(); var somethingToShow=false; var nextPage=pageNumber; while(nextPage>1 && !somethingToShow) { nextPage--; somethingToShow=snapEvalShowPage(nextPage, (nextPage==1)); } return false; } function snapPrint(eventOb) { if (snapIgnoreKey(eventOb)) return true; window.print(); } // Page navigation function snapResetPage(eventOb) { if (snapIgnoreKey(eventOb)) return true; if (eventOb && eventOb.preventDefault) eventOb.preventDefault(); var aPage=snapMappedPage(pageNumber); if (pageContents[aPage]) { var changed = false; var pageItems = pageContents[aPage]; for(var i=0; i<pageItems.length; i++) { var controls = snapObjectsByName(pageItems[i]); if (controls && controls.length > 0) { for(var j=0; j<controls.length; j++) { var elem = controls[j]; if (elem && elem.tagName != null) { var lTagName = elem.tagName.toLowerCase(); if (lTagName=="input") { if ((elem.type!= null) && (elem.type.toLowerCase() == 'text')) { if (elem.value && elem.value!="") { elem.value = ""; changed = true; } } else if (elem.checked) { elem.checked = false; changed = true; } } else if (lTagName=="textarea") { if (elem.value && elem.value!="") { elem.value = ""; changed = true; } } else if (lTagName=="select") { if (elem.selectedIndex != null) { elem.selectedIndex = 0; } for (var op = 0; op < elem.options.length; op++) { if (elem.options[op].value > 0 && elem.options[op].selected) { elem.options[op].selected = false; changed = true; } } } } } } } if (changed) { snapApplyInitialSubstitutions(); resetRouting(); snapEvalPageRouting(); } } return false; } function snapResetAll(eventOb) { if (snapIgnoreKey(eventOb)) return true; document.forms["SnapForm"].reset(); snapApplyInitialSubstitutions(); resetRouting(); snapEvalPageRouting(); snapShowPage(1); } // Page navigation function snapShowPage(target) { if (target>=1 && target<=lastPageNumber) { snapInclude(snapObject("p_p"+snapMappedPage(pageNumber)), false); snapInclude(snapObject("p_p"+snapMappedPage(target)), true, 'block'); pageNumber=target; snapFocusPage(pageNumber); } if(lastPageNumber>0) { // buttons ------------------------------------- // one snapInclude per button, with condition set acccording to user selection for (var butn in showButtonOptions) { snapIncludeBtn(snapObject(butn), eval(showButtonOptions[butn])); } // progress bar ------------------------------------- // can be left in always. Variable 'pBars' indicates number of images progress=snapObject("b_progress"); if (progress) { var progText = ""; if (progress.tagName != null && progress.tagName.toLowerCase()=="span") { progress.firstChild.nodeValue = progText; } else { if(progress.src) { var file=pbRatio(pBars); progress.src=progress.src.replace(/\d{2}\.gif/, file+".gif"); } progress.alt=progText; } } } } function snapFocusPage(page) { var found = false; page=snapMappedPage(page); if(page>=1 && page<=lastPageNumber) { if (pageContents[page]) { var pageItems = pageContents[page]; for(var j=0; j<pageItems.length && !found; j++) { if (getAsked(pageItems[j])) { var code =0; var codeOb= null; do { code++; codeOb = snapObject(pageItems[j]+'_'+code); if (codeOb) { try { found = true; codeOb.focus(); } catch (e)//hidden control { found = false; } } } while (!found && codeOb != null) } } } if (window.scrollTo) { window.scrollTo(0,0); }else if (window.scroll) { window.scroll(0,0); } } } function snapShowQuestion(name) { var control = snapObject(name + "_1"); if (control) control.focus(); var tab = snapObject(name); if (tab) { var offset = findObjY(tab); if (window.scrollTo) { window.scrollTo(0,offset); }else if (window.scroll) { window.scroll(0,offset); } } } function findObjY(obj) { var curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent; } } else if (obj.y) curtop = obj.y; return curtop; } // Page navigation // Invalidate Routing cache for dependents of 'question' function snapUndoRoutingFor(name) { if (name && dependents[name]) { var undo=dependents[name]; for (var i=0; i<undo.length; i++) { var thisVar = undo[i]; if (askedCache[thisVar]!=null) delete askedCache[thisVar]; if (snapIsGrid(thisVar)) { var gridOwner = thisVar; if(gridFirstList[thisVar]!=null) { gridOwner=gridFirstList[thisVar]; } gridOwner += "_GRID"; if (askedCache[gridOwner]!=null) delete askedCache[gridOwner]; } } } } function resetRouting() { for (var x in askedCache) delete askedCache[x]; } // Page navigation // recalculate routing for this given page (or current page if aPage==null) function snapEvalPageRouting(aPage, postponedItems) { var somethingShown=false; if (aPage==null) aPage=pageNumber; aPage=snapMappedPage(aPage); if (aPage>=1 && aPage<=lastPageNumber && pageContents[aPage]) { var pageItems=pageContents[aPage]; for (var i=0; i<pageItems.length; i++) { if(snapEvalAskedFor(pageItems[i], postponedItems)) { somethingShown=true; } } } return somethingShown; } // Page navigation function snapIsPageIncluded(p) { } //////////////////////////////////////////////////////////////////////////////// // Text substitution function snapApplyInitialSubstitutions() { var all_span = snapObjectsByTagName('span'); var i; for(i=0;i<all_span.length;i++) { if(all_span[i].id) { var pos = all_span[i].id.indexOf("_reply"); if (pos > 0) { var questionName=all_span[i].id.substr(0, pos); if(questionName && snapObject(questionName)) all_span[i].firstChild.nodeValue=snapVarReply(questionName); } } } } // Text substitution function snapSubstituteText(questionName) { if (textSubLookup == null) { textSubLookup = new Array(); var all_span = snapObjectsByTagName('span'); var i; for(i=0;i<all_span.length;i++) { if(all_span[i].id) { var nameLen = all_span[i].id.indexOf('_reply'); if (nameLen > 0) { var newName = all_span[i].id.substr(0, nameLen); if (textSubLookup[newName] == null) { textSubLookup[newName] = new Array(); } var subList = textSubLookup[newName]; subList[subList.length] = all_span[i]; } } } } if (textSubLookup[questionName] != null) { var subList = textSubLookup[questionName]; var i; for(i=0;i<subList.length;i++) { if(subList[i].id && (0 == subList[i].id.indexOf(questionName+'_reply'))) { subList[i].firstChild.nodeValue=snapVarReply(questionName); } } } } // Value substitution function snapEvalTotals(name) { var expr=totalList[name]; if(expr!=null) eval(expr); } // Value substitution function totalise() { var i=0, j=0, sum=0, varFloat=0, blank=true, isZero=false, varString='', srcVar, tarVar; var lastValues = new Array(); var allowNegs=arguments[arguments.length-3]; // allow negative responses var roundNums=arguments[arguments.length-2]; // round numbers up/down var cleanNum=arguments[arguments.length-1]; // clean data: delete non-numeric chars or delete invalid num for (i=0; i<arguments.length-4; i++) // loop source variables, edit and add to sum { varString = snapVarReply(arguments[i]); if (cleanNum) varString = cleanNumber(varString, allowNegs); // clean data if (roundNums) varString = '' + Math.round(parseFloat(varString)); // round number and cast back to string varFloat = parseFloat(varString); if ((!allowNegs && varFloat < 0) || isNaN(varFloat)) // delete invalid number { varString=''; varFloat=0; } sum += varFloat; // add to running total if (varString == '0') isZero=true; // If source var is '0' the total should display '0' not '' if (varString != '') blank=false; // If all source vars are blank total should be blank } if(blank) sum=''; else sum=''+sum; if(snapIsOpen(arguments[arguments.length-4])) snapSetOpenReply(arguments[arguments.length-4], sum); } // Value substitution function cleanNumber(varString, allowNegs) { var newVarString = ""; if(allowNegs) newVarString=varString.replace(/^[^+\-0~9]*([+\-]?\d*\.?\d*).*$/, '$1'); else newVarString=varString.replace(/^[^+0~9]*(\+?\d*\.?\d*).*$/, '$1'); return newVarString; } //////////////////////////////////////////////////////////////////////////////// // Variable display function snapInclude(obj, show, val) { var changed = false; if (obj) { if (val == null) { val = ''; } if (!show) { val = 'none'; } if (obj.style.display!=val) { obj.style.display = val; changed = true; } } return changed; } function snapIncludeBtn(obj, show, val) { snapInclude(obj, show, val); if (obj && obj.parentNode) { var bParent = obj.parentNode; if (bParent && bParent.tagName && ("a" == bParent.tagName.toLowerCase())) { snapInclude(bParent, show, val); } } } function snapHide(obj, show) { if (obj) { obj.style.visibility=show?'visible':'hidden'; } } // Variable display function snapIsIncluded(obj) { var result=false; if (obj) result=(obj.style.display!='none'); return result; } //////////////////////////////////////////////////////////////////////////////// // Rotation function snapRotateGrid(questionList, rotationType) { var aCode; var questions = questionList.split(','); var questionNodes=new Array(); var i, j; var overallParent; var overallOk=true; for(i=0;i<questions.length;i++) { var nodes=snapObject(questions[i]+"_1"); questionNodes[i]=snapObject(questions[i]+"_1"); for(j=0;j<2;j++) { if(questionNodes[i]) questionNodes[i]=questionNodes[i].parentNode; } if(questionNodes[i]) { if(i==0) { overallParent=questionNodes[i].parentNode; if(!overallParent) { overallOk=false; } } else if(overallParent!=questionNodes[i].parentNode) { overallOk=false; } } else { overallOk=false; } } if(overallOk) { var newOrder=snapRotationOrder(questions.length, rotationType) for(i=0;i<questions.length;i++) overallParent.appendChild(questionNodes[newOrder[i]-1]); } } // Rotation function snapRotationOrder(numCodes, rotationType) { var codeList=new Array(numCodes); var i, j; var newCodeNum; for(i=0;i<numCodes;i++) codeList[i]=i+1; if(rotationType=='random') { for(i=0;i<numCodes;i++) { do { newCodeNum=Math.round(Math.random()*numCodes); } while(newCodeNum<0 || newCodeNum>=numCodes); j=codeList[i]; codeList[i]=codeList[newCodeNum]; codeList[newCodeNum]=j; } } else if(rotationType=='inverse') { if(Math.random()>=0.5) { for(i=0;i<numCodes;i++) codeList[i]=numCodes-i; } } else if(rotationType=='forwards' || rotationType=='backwards') { j=Math.round(Math.random()*numCodes); for(i=0;i<numCodes;i++) codeList[i]=(i+j)%numCodes+1; } return codeList; } // Rotation function findArrayValue(array, value) { var i; for(i=0;i<array.length;i++) { if(array[i]==value) return i; } return null; } // Rotation function snapRotateCodesDropdown(question, numCodes, rotationType) { var aCode=snapObject(question+"_1"); if(aCode && aCode.childNodes) { if(numCodes>=aCode.childNodes.length) numCodes=aCode.childNodes.length-1; var targetOrder=snapRotationOrder(numCodes, rotationType); var minCode=aCode.childNodes.length; for(var i=0; i<numCodes; i++) { for(var j=0;j<aCode.childNodes.length;j++) { if(aCode.childNodes[j].value==targetOrder[i]) { if(minCode>j) minCode=j; aCode.appendChild(aCode.childNodes[j]); j=aCode.childNodes.length; } } } i+=minCode; while(i<aCode.childNodes.length && minCode>=0 && minCode<aCode.childNodes.length) { aCode.appendChild(aCode.childNodes[minCode]); i++; } } } // Rotation function snapRotateCodes(question, numCodes, rotationType) { if(snapIsDropdown(question)) { snapRotateCodesDropdown(question, numCodes, rotationType); } else { var i, j, k; var aCode, aCodeNum, aParent; var newCode, newCodeNum, newParent; var targetOrder=snapRotationOrder(numCodes, rotationType); var actualOrder=new Array(numCodes); for (i=0; i<numCodes; i++) actualOrder[i]=i+1; for (i=0; i<numCodes; i++) { aCodeNum=actualOrder[i]; newCodeNum=targetOrder[i]; if (aCodeNum != newCodeNum) { j=findArrayValue(actualOrder, newCodeNum); aCode=snapObject(question+"c"+aCodeNum); newCode=snapObject(question+"c"+newCodeNum); if (aCode == null) aCode=snapObject(question+"_"+aCodeNum); if (newCode == null) newCode=snapObject(question+"_"+newCodeNum); if(aCode && aCode.parentNode && newCode && newCode.parentNode) { k=actualOrder[i]; actualOrder[i]=actualOrder[j]; actualOrder[j]=k; snapSwapObs(aCode, newCode); snapSwapObs(snapObject(question+"g"+aCodeNum), snapObject(question+"g"+newCodeNum)); snapSwapObs(snapObject(question+"v"+aCodeNum), snapObject(question+"v"+newCodeNum)); } } } } } function snapSwapObs(aCode, newCode) { if(aCode && newCode) { var aParent=aCode.parentNode; var newParent=newCode.parentNode; if (aParent &&newParent) { aParent.removeChild(aCode); newParent.removeChild(newCode); aParent.appendChild(newCode); newParent.appendChild(aCode); } } } //////////////////////////////////////////////////////////////////////////////// // Variable No Reply function snapIsNoReply(question) { return snapVarReply(question)=="(no reply)"; } // Variable No Reply function snapForceReply(question, realName) { var result=true; if(asked(question) && snapIsNoReply(question)) { alert("Please provide an answer for question "+realName+"."); result=false; snapShowQuestion(question); } return result; } function snapPageValidationOk(page) { var result=true; page=snapMappedPage(page); if(page>=1 && page<=lastPageNumber && pageContents[page]) { var pageItems = pageContents[page]; for(var j=0; j<pageItems.length && result; j++) { var question = pageItems[j]; if(validateList[question]!=null) { if (asked(question)) {result=eval(validateList[question]); } } if(result && (forceReply[question]!=null)) { result=snapForceReply(question, forceReply[question]); } } } return result; } function doAutoAns(varName) { if (null != codeMaskList[varName]) { var numCodes=snapNumCodes(varName); var autoReplies=0; var selObj = null; if (snapIsDropdown(varName)) selObj = snapObject(varName+'_1'); var changed = false; for(var i=1;i<=numCodes;i++) { var expr=codeMaskList[varName].replace(/code/g, i); var showThisCode=eval(expr); if (selObj && selObj.options) { var found = false; for (var x = 0; x < selObj.options.length && !found; x++) { if (selObj.options[x].value == i) { found = true; if (selObj.options[x].selected != null) { if (showThisCode != selObj.options[x].selected) { changed = true; selObj.options[x].selected = showThisCode; } } } } } else { var codeOb = snapObject(varName+'_'+i); if (codeOb && codeOb.checked != null) { if (showThisCode != codeOb.checked) { changed = true; codeOb.checked = showThisCode; } } } } if (changed) snapOnChange(varName); } } //////////////////////////////////////////////////////////////////////////////// // Variable Not Asked function snapEvalAskedFor(v, postponedItems) { var somethingShown=true; var isGrid = snapIsGrid(v); var changed = false; if(askedCalc[v] || codeMaskList[v]) { var ask=asked(v); ask=(ask==null || ask); askedCache[v]=ask; somethingShown=ask; if(isGrid) { var gridLine=snapObject(v+'_1'); while(gridLine!=null && (gridLine.tagName==null || gridLine.tagName.toLowerCase()!='tr')) gridLine=gridLine.parentNode; if(gridLine!=null) { snapInclude(gridLine, ask); } var gridOwner=v; if(gridFirstList[v]!=null) { gridOwner=gridFirstList[v]; snapInclude(snapObject(v+'_SPACER'), ask); } var gridName = gridOwner +"_GRID" if(askedCalc[gridName]) { var ask=asked(gridName); snapInclude(snapObject(gridName), ask); snapInclude(snapObject(gridOwner+'_SPACER'), ask); somethingShown=ask; } } else { if (snapInclude(snapObject(v), ask)) changed = true; snapInclude(snapObject(v+'_SPACER'), ask); } if (!ask && doAutoAnsList[v]) { doAutoAns(v); } } if(somethingShown && codeMaskList[v]) { var isCombo = snapIsDropdown(v); var numCodes=snapNumCodes(v); var i; var showThisCode; somethingShown=false; for(i=1;i<=numCodes;i++) { var expr=codeMaskList[v].replace(/code/g, i); showThisCode=eval(expr); if (isCombo) { if (snapIncludeCombo(v, i, showThisCode, postponedItems)) changed = true; } else { var codeObject = snapObject(v+'c'+i); var codeBox = snapObject(v+'_'+i); if(codeObject ) snapInclude(codeObject, showThisCode); else snapInclude(codeBox, showThisCode); snapHide(snapObject(v+'g'+i), showThisCode); snapHide(snapObject(v+'v'+i), showThisCode); if (!showThisCode) { if (codeBox && (codeBox.checked)) { codeBox.checked = false; changed = true; } } } if(showThisCode) somethingShown=true; } } if (changed) snapOnChange(v); return somethingShown; } function snapIncludeCombo(name, code, showThisCode, postponedItems) { var changed = false; var selOb = snapObject(name + '_1'); if (selOb && selOb.options && (cacheSelectOptions.splice!=null)) { var found = false; if (showThisCode) { var removedList = cacheSelectOptions[name]; if (removedList) { for (var i =0; i < removedList.length && !found; i++) { if (removedList[i].value != null && removedList[i].value == code) { found = true; if (postponedItems) { postponedItems[name] = true; } else { var option = removedList[i]; removedList.splice(i, 1); var pos = null; for (var j =0; j < selOb.options.length && (null == pos); j++) { if (selOb.options[j].value > option.value || (selOb.options[j].value ==0 && selOb.options[j].text=="")) { pos = selOb.options[j]; } } selOb.insertBefore(option, pos ); } } } } } else { for (var i =0; i < selOb.options.length && !found; i++) { if (selOb.options[i].value == code) { found = true; if (selOb.options[i].selected) { changed = true; try{ selOb.options[i].selected = false; }catch(e) {//ie 6 bug? } } if (postponedItems) { postponedItems[name] = true; } else { var option = selOb.options[i]; selOb.removeChild(option); if (!cacheSelectOptions[name]) cacheSelectOptions[name] = new Array(); cacheSelectOptions[name].push(option); } } } } } return changed; } //////////////////////////////////////////////////////////////////////////////// // Variable exclusive function snapCheckExclusiveOf(object) { if (object.checked && object.name && exclusive[object.name] && object.id) { var changed = false; var c; var excl=exclusive[object.name]; var code=parseInt(object.id.substr(object.id.indexOf('_')+1), 10); var isExclusive=false; for (c=0; c<excl.length && !isExclusive; c++) { if (excl[c]==code) isExclusive=true; } if (isExclusive) { var codeList=snapObjectsByName(object.name); for (c=0; c<codeList.length; c++) { if (object!=codeList[c] && codeList[c].checked) { codeList[c].checked=false; changed = true; } } } else { for (c=0; c<excl.length; c++) { code=snapObject(object.name+'_'+excl[c]); if (code && code.checked) { code.checked=false; changed = true; } } } if (changed) { snapOnChange(object.name); } } } //////////////////////////////////////////////////////////////////////////////// // Variable type function snapNumCodes(question) { var result=cacheNumCodes[question]; if(result==null) { var testCombo = snapObject(question+"_"+1); if (testCombo && testCombo.tagName && testCombo.tagName.toLowerCase() == 'select') { result = testCombo.options.length - 1; } else { var c=1; result=0; while(snapObject(question+"_"+c)) { result=c; c++; } } cacheNumCodes[question]=result; } return result; } // Variable type function snapIsOpen(name) { var result=cacheIsOpen[name]; if(result==null) { result=false; var aCode; aCode=snapObject(name+'_1'); if(aCode!=null) result=(aCode.type=='text' || aCode.type=='textarea'); cacheIsOpen[name]=result; } return result; } // Variable type function snapIsClosed(name) { var result=cacheIsClosed[name]; if(result==null) { result=false; var aCode; aCode=snapObject(name+'_1'); if(aCode!=null) result=(aCode.type=='checkbox' || aCode.type=='radio' || aCode.type=='select-one' || aCode.type=='select-multiple'); cacheIsClosed[name]=result; } return result; } // Variable type function snapIsDropdown(name) { var result=cacheIsDropdown[name]; if(result==null) { result=false; var aCode; aCode=snapObject(name+'_1'); if(aCode!=null) result=(aCode.type=='select-one' || aCode.type=='select-multiple'); cacheIsDropdown[name]=result; } return result; } function snapObjectLabel(name, code) { var result=null; var all_labels = snapObjectsByTagName('label'); var i; if(gridFirstList[name]!=null) name=gridFirstList[name]; for(i=0;i<all_labels.length && result==null;i++) { if(all_labels[i].htmlFor && all_labels[i].htmlFor==name+'_'+code) { result=all_labels[i]; } } return result; } // Variable type function snapIsGrid(name) { var result=cacheIsGrid[name]; if(result==null) { result = false; if(gridFirstList[name]!=null) { result = true; } else { var posGridName = name+"_GRID"; if (null != snapObject(posGridName)) { result = true; } } cacheIsGrid[name]=result; } return result; } //////////////////////////////////////////////////////////////////////////////// // Variable response function snapVarReply(name) { var result="(no reply)"; if (asked(name)) { if(snapIsOpen(name)) result=snapOpenReply(name); else if(snapIsClosed(name)) result=snapClosedReply(name); } return result; } // Variable response function snapVarValue(name) { var result=""; var c=1; var code=snapObject(name+'_'+c); while(code) { if(code.options) { for (var i = 0; i < code.options.length; i++) { var thisOption=code.options[i]; if(thisOption!=null && thisOption.selected && thisOption.value!=null && thisOption.value.length>0) { if(result.length>0) result+=';'; result+=thisOption.value; } } } else { if((code.checked==null || code.checked) && code.value!=null && code.value.length>0) { if(result.length>0) result+=';'; result+=code.value; } } c++; code=snapObject(name+'_'+c); } return result; } // Variable response function snapClosedAns(name) { var result=null; if(asked(name)) { result=snapVarValue(name); } if(result==null) result=""; return result; } // Variable response function snapClosedReply(name) { var result="(no reply)"; var response=snapVarValue(name); if(response.length>0) { var responses=response.split(";"); var i; result=""; for(i=0;i<responses.length;i++) { if(i>0) { if(i<responses.length-1) result+=", "; else result+=" and "; } result += snapCodeLabel(name, responses[i]); } } return result; } // Variable response function snapCodeLabel(name, code) { var result=code; if(snapIsDropdown(name)) { var labelNode=snapObject(name+'_1'); var i; for(i=0;i<labelNode.childNodes.length;i++) { if(code==labelNode.childNodes[i].value && labelNode.childNodes[i].firstChild!=null) result=labelNode.childNodes[i].firstChild.nodeValue; } } else { var all_labels = snapObjectsByTagName('label'); var i; if(gridFirstList[name]!=null) name=gridFirstList[name]; for(i=0;i<all_labels.length;i++) { if(all_labels[i].htmlFor && all_labels[i].htmlFor==name+'_'+code) { if (all_labels[i].innerText) result=all_labels[i].innerText; else if (all_labels[i].textContent ) result=all_labels[i].textContent; else if (all_labels[i].firstChild && (null != all_labels[i].firstChild.nodeValue)) result=all_labels[i].firstChild.nodeValue; else if (all_labels[i].innerHTML) result=all_labels[i].innerHTML; } } } return result; } // Variable response function snapOpenAns(name) { var reply="" if(asked(name)) { var glovar=snapObject(name+'_1'); if(glovar != null && glovar.value!=null) reply=glovar.value; } return reply; } // Variable response function snapOpenReply(name) { var reply=""; var glovar=snapObject(name+'_1'); if(glovar != null) { reply=glovar.value; if(reply!=null) { while(reply.length>0 && reply.charAt(reply.length-1)==' ') reply=reply.substr(0, reply.length-1); while(reply.length>0 && reply.charAt(0)==' ') reply=reply.substr(1, reply.length-1); } } if(reply==null || reply.length==0) reply="(no reply)"; return reply; } // Variable response function snapSetOpenReply(name, value) { var glovar=snapObject(name+'_1'); if(glovar != null && glovar.value!=null) glovar.value=value; } // Variable response function snapChangeMade(arg) { var origin = snapEventOrigin(arg); if (origin) { snapCheckValueOf(origin); snapOnChange(origin.name); } } function snapOnChange(name) { if (name) { snapUndoRoutingFor(name); snapResponse(name); snapEvalTotals(name); snapSubstituteText(name); snapEvalPageRouting(); } } // Variable response // Check syntax of open-ended variables / check exclusive code settings for others function snapCheckValueOf(object) { var typename = object.type.toLowerCase(); if (typename=='checkbox' || typename =='radio') snapCheckExclusiveOf(object); else if ((object.tagName != null) && (object.tagName.toLowerCase()=='select')) snapSelectExclusiveOf(object); } function snapSelectExclusiveOf(object) { if (object.name && exclusive[object.name] && object.id) { try{ nota_dd(object, exclusive[object.name]); }catch(e){//nota_dd may not exist } } } // Variable response function snapResponse(name) { var reply=''; var code; var i; if (codeLabels[name]) { var labels=eval('new Array('+codeLabels[name]+')'); var xref=new Array(); var x=0; for (i=0, x=0; i<labels.length; i++) { code=snapObject(name+'_'+(i+1)); if (code && code.checked) xref[x++]=i; } if (xref.length>0) { reply=labels[xref[0]]; if (xref.length>1) { for (i=1; i<xref.length-1; i++) reply = reply+', '+labels[xref[i]]; reply = reply+' and '+labels[xref[i]]; } } } else { code=snapObject(name+'_1'); if (code) reply=code.value; } if (reply.length) { var places=snapObjectsByName(name+'_reply'); for (i=0; i<places.length; i++) { places[i].firstChild.nodeValue=reply; } } } //////////////////////////////////////////////////////////////////////////////// // Used by snapparj function getAsked(name) { var isAsked = true; if(!name || name=="") { isAsked=false; } else if(askedCalc[name]) { isAsked=eval(askedCalc[name]); } if (isAsked && (null != codeMaskList[name])) { var numCodes=snapNumCodes(name); var autoReplies=0; if (autoAnsList[name]) { doAutoAnsList[name] = false; autoReplies = autoAnsList[name]; } var showing = 0; for(var i=1;i<=numCodes && (showing <= autoReplies);i++) { var expr=codeMaskList[name].replace(/code/g, i); var showThisCode=eval(expr); if (showThisCode) showing++; } if (showing <= autoReplies) { isAsked = false; if (autoReplies > 0) doAutoAnsList[name] = true; } } return isAsked; } // Used by snapparj function asked(name) { if (null == askedCache[name]) { askedCache[name]=getAsked(name); } return askedCache[name]; } // Used by snapparj function noreply(name) { var isNR = false; if (asked(name)) { if (ans(name) == "") { isNR = true; } } return isNR; } // Used by snapparj function ans(name) { var answer=""; if(snapIsOpen(name)) answer=snapOpenAns(name); else if(snapIsClosed(name)) answer=snapClosedAns(name); return answer; } // Used by snapparj function ansAsNum(name) { return parseFloat(ans(name)); } // Used by snapparj function cVR(name,value) { var result=false; if (asked(name)) { var glovar=snapObject(name); if(glovar != null) { var testValue=snapVarValue(name); if((";"+testValue+";").indexOf(";"+value+";")>=0) { result=true; } } } return result; } // Used by snapparj function cVV(name1,name2) { var result=false; if (asked(name1) && asked(name2) && !noreply(name1) && !noreply(name2)) { var r1=";"+ans(name1)+";"; var r2=";"+ans(name2)+";"; while(r2.length>2&&!result) { var i=r2.substring(1).indexOf(";")+1; if(r1.indexOf(r2.substring(0,i+1))>=0) result=true; else r2=r2.substring(i); } } return result; } // Used by snapparj function cVM(name)//(, ...) { var result=false; var numArgs = arguments.length; if ((1 < numArgs) && asked(name)) { if (snapIsClosed(name)) { if (snapIsDropdown(name)) { var control = snapObject(name + '_1'); if (control && (control.options != null)) { if (control.type.toLowerCase()=='select-one') { if (control.options[control.selectedIndex] != null) { var val = control.options[control.selectedIndex].value; if (val > 0) { for (var i = 1; (i < numArgs) && !result; i++) { result = (val == arguments[i]); } } } }else { for (var opt = 0; !result && (opt < control.options.length); opt++) { if (control.options[opt].selected && (control.options[opt].value>0)) { var val = control.options[opt].value; for (var i = 1; (i < numArgs) && !result; i++) { result = (val == arguments[i]); } } } } } }else { for (var i = 1; (i < numArgs) && !result; i++) { var requiredCode = snapObject(name + '_' + arguments[i]); if ((null != requiredCode) && (null != requiredCode.checked)) { result = (requiredCode.checked == true); } } } }else { var answer = ans(name); if (answer!="") { answer = ";"+answer+";"; for (var i = 1; (i < numArgs) && !result; i++) { if (0 <= answer.indexOf(";"+arguments[i]+";")) { result = true; } } } } } return result; } // Used by snapparj function cInRange(value, minValue, maxValue) { var result=(value!=null && (maxValue!=NaN) && (minValue!=NaN) && (value>=minValue && value<=maxValue)||(value>=maxValue && value<=minValue)); return result; } //////////////////////////////////////////////////////////////////////////////// function codeReply(name,nameCodes) { var reply=""; var glovar=snapObject(name); if(glovar != null) { var first=true; var mValue=glovar.value+";"; while(mValue.length>1) { var cPos=mValue.indexOf(";"); if(!first) { if(cPos==mValue.length-1) reply+=" and "; else reply+=", "; } reply+=nameCodes[parseInt(mValue.substring(0,cPos), 10)-1]; first=false; mValue=mValue.substring(cPos+1); } } if(reply.length==0) reply="(no reply)"; return reply; } //////////////////////////////////////////////////////////////////////////////// // Timer function fStartTimer(uk) { if (!timerStarted) { startPoint = new Date(); var hours = startPoint.getHours(); var mins = "00" + startPoint.getMinutes(); var timeValue = ""+hours+":"+mins.substr(mins.length - 2); var days = startPoint.getDate(); var months = startPoint.getMonth() + 1; var years = "00" + startPoint.getYear().toString(); years = years.substr(years.length - 2); var dateValue; if (uk) dateValue = days + "/" + months + "/" + years; else dateValue = months + "/" + days + "/" + years; snapSetOpenReply("0", timeValue); snapSetOpenReply("0", dateValue); timerStarted = true; } } // Timer function fEndTimer() { if (timerStarted) { endPoint = new Date(); var hours = endPoint.getHours(); var mins = "00" + endPoint.getMinutes(); var timeValue = ""+hours+":"+mins.substr(mins.length - 2); var durationValue=((endPoint - startPoint) / 60000); snapSetOpenReply("0", timeValue); snapSetOpenReply("0", durationValue); if (snapObject("0_1")) { var days = endPoint.getDate(); var months = endPoint.getMonth() + 1; var years = "00" + endPoint.getYear().toString(); years = years.substr(years.length - 2); var dateValue; if (1)//true=uk,false=usa dateValue = days + "/" + months + "/" + years; else dateValue = months + "/" + days + "/" + years; snapSetOpenReply("0", dateValue); } timerStarted = false; } } // Timer function getIndex(name,aDoc) { for(var c=0;c<aDoc.length;c++) { if(aDoc[c].name==name) return c; } return -1; } //////////////////////////////////////////////////////////////////////////////// // Progress Bar function pbRatio(OutOf) { var result=1; if (pageNumber >= lastPageNumber) result = OutOf; else if (pageNumber <= 1) result =1; else if (OutOf <= 2) result = Math.round(OutOf*pageNumber/lastPageNumber); else result = 2 + Math.floor((OutOf-2)*(pageNumber-1)/(lastPageNumber-1)); if (1>result) result="01"; else if (10 > result) result = "0" + result; else result = "" + result; return result; } //////////////////////////////////////////////////////////////////////////////// // Validation function isValidNum(name,allowNegatives,realName) { var isValid=true; var locVar=snapObject(name); if (locVar != null) { var numstr=locVar.value; if (allowNegatives+""=="undefined" || allowNegatives+""=="null") allowNegatives = true; numstr+=""; for(var i=0;i<numstr.length;i++) { if (!((numstr.charAt(i)>="0")&&(numstr.charAt(i)<="9")||((numstr.charAt(i)==".")&&(numstr.charAt(i+1)!="."))||(numstr.charAt(i)=="-"))) isValid=false; else if((numstr.charAt(i)=="-"&&i!=0)||(numstr.charAt(i)=="-"&&!allowNegatives)) isValid=false; } if(!isValid) { locVar.focus(); alert("Please enter a valid number for question "+realName+"."); } } return isValid; } // Validation function RangeCheck(name,realName,min,max,UiCode) { var isValid=true; var locVar=snapObject(name); if (locVar != null) { var numstr=""+locVar.value; if (0 < numstr.length) { var number = parseFloat(numstr); if(number<min || number>max || isNaN(number)) { isValid = false; locVar.focus(); if ((1 == UiCode) && (min!=max)) { alert("Please give an answer between "+min+" and "+max+" for question "+realName+"."); } else if (0 != UiCode) { alert("Please enter a valid number for question "+realName+"."); } } } } return isValid; } // Validation function DateRange(name,realName,min,max,UiCode) { var varDate = getVarDate(name,realName); var isValid = ("invalid" != varDate); if(isValid && ("" != varDate)) { if((varDate.getTime() < min.getTime())||(varDate.getTime() > max.getTime())) { isValid = false; var locVar=snapObject(name); if (locVar != null) { locVar.focus(); } if ((1 == UiCode) && (min.getTime()!=max.getTime())) { alert("Please give an answer between "+FormatDate(min)+" and "+FormatDate(max)+" for question "+realName+"."); } else if (0 != UiCode) { alert("You've entered an invalid date or date format for question "+realName+".\n"); } } } return isValid; } // Validation function getVarDate(name,realName) { var indate=""; var locVar = snapObject(name); if (locVar != null) indate=locVar.value; if(indate==null || indate.length==0) return ""; var punct; if(indate.indexOf(".")!=-1) punct="."; else if(indate.indexOf("-")!=-1) punct="-"; else punct="/"; var day; var month; var year; var warningMessage; if (1)//true=uk,false=usa { day=indate.substring(0,indate.indexOf(punct)); month=indate.substring(indate.indexOf(punct)+1,indate.lastIndexOf(punct)); warningMessage = "Please use the DD/MM/YY format."; } else { month=indate.substring(0,indate.indexOf(punct)); day=indate.substring(indate.indexOf(punct)+1,indate.lastIndexOf(punct)); warningMessage = "Please use the MM/DD/YY format."; } year=indate.substring(indate.lastIndexOf(punct)+1,indate.length); month = getMonthName(month-1); if (year.length == 2) { if (30 > parseInt(year, 10)) { year = "20"+year; } else { year = "19"+year; } } if (month=="" || year.length != 4 || parseInt(day, 10) > 31) { locVar.focus(); alert("You've entered an invalid date or date format for question "+realName+".\n"+warningMessage); return "invalid"; } if (day.length == 1) day = "0" + day; var varDate = new Date(Date.parse(month + " " + day + ", " + year)); var cmpDate1 = day + "/" + month + "/" + year; var month2 = getMonthName(varDate.getMonth()); day = varDate.getDate(); if (day.toString().length == 1) { day = "0" + day; } var cmpDate2 = day + "/" + month2 + "/" + varDate.getFullYear(); if (cmpDate1 != cmpDate2) { locVar.focus(); alert("You've entered an invalid date or date format for question "+realName+".\n"+warningMessage); return "invalid"; } return varDate; } // Validation function isValidDate(name,realName) { var varDate = getVarDate(name,realName); return ("invalid" != varDate); } // Validation function TimeRange(name,realName,min,max,UiCode) { var varTime = getVarTime(name,realName); var isValid = ("invalid" != varTime); if(isValid && ("" != varTime)) { if((varTime.getTime() < min.getTime())||(varTime.getTime() > max.getTime())) { isValid = false; var locVar = snapObject(name); if (locVar != null) locVar.focus(); if ((1 == UiCode) && (min.getTime()!=max.getTime())) { alert("Please give an answer between "+FormatTime(min)+" and "+FormatTime(max)+" for question "+realName+"."); } else if (0 != UiCode) { alert("You've entered an invalid time or time format for question "+realName+".\n"); } } } return isValid; } // Validation function getVarTime(name,realName) { var intime=""; var locVar = snapObject(name); if (locVar != null) intime=locVar.value; if(intime.length==0) return ""; var punct; if(intime.indexOf(".")!=-1) punct="."; else if(intime.indexOf("-")!=-1) punct="-"; else punct=":"; var hour = "00"; var minute = "00"; var second = "00"; var times = intime.split(punct); if(times.length >= 1) hour = times[0]; if(times.length >= 2) minute = times[1]; if(times.length >= 3) second = times[2]; if(parseInt(hour, 10) > 23 || parseInt(minute, 10) > 59 || parseInt(second, 10) > 59) { locVar.focus(); alert("You've entered an invalid time or time format for question "+realName+".\n"+"Please use the hh:mm:ss format."); return "invalid"; } if (hour.length == 1) hour = "0" + hour; if (minute.length == 1) minute = "0" + minute; if (second.length == 1) second = "0" + second; var varTime = new Date(Date.parse("1/1/1970 " + hour + ":" + minute + ":" + second)); var cmpTime1 = hour + ":" + minute + ":" + second; hour = varTime.getHours(); minute = varTime.getMinutes(); second = varTime.getSeconds(); if (hour.toString().length == 1) hour = "0" + hour; if (minute.toString().length == 1) minute = "0" + minute; if (second.toString().length == 1) second = "0" + second; var cmpTime2 = hour + ":" + minute + ":" + second; if (cmpTime1 != cmpTime2) { locVar.focus(); alert("You've entered an invalid time or time format for question "+realName+".\n"+"Please use the hh:mm:ss format."); return "invalid"; } return varTime; } // Validation function AnswerRange(varName,realName,min, max) { var valid = true; var numCodes = snapNumCodes(varName); var count = 0; if (snapIsDropdown(varName)) { var control = snapObject(varName + '_1'); if (control && (control.options != null)) { for (var x = 0; (x < control.options.length); x++) { if (control.options[x].selected && (control.options[x].value>0)) { count++; } } } } else { for (var x=1; x <= numCodes; x++) { var codeOb = snapObject(varName + '_' + x); if (codeOb && (codeOb.checked)) { count++; } } } if (count < min) { valid = false; } else if (count > max) { valid = false; } if (!valid) { alert("Question "+realName+" requires between "+min+" and "+max+" replies."); } return valid; } // Validation function isValidTime(name,realName) { var varTime = getVarTime(name,realName); return ("invalid" != varTime); } // Validation function ValidationPattern(name,realName,pattern,patternName) { var Result=true; var indate=""; var locVar = snapObject(name); if (locVar != null) { indate=locVar.value; if(indate!=null && indate.length>0 && indate.search) { Result=(0<=indate.search(pattern)); if(!Result) { alert("You've entered an invalid "+patternName+" for question "+realName+"."); } } } return Result; } //masking function VarToNum(varName) { var result = 0; if (snapIsOpen(varName)) { var control = snapObject(varName + '_1'); if (control && (control.value != null)) { result = parseInt(control.value, 10); } } else if (snapIsDropdown(varName)) { var control = snapObject(varName + '_1'); if (control && (control.options != null)) { var ok = true; for (var x = 0; (x < control.options.length) && ok; x++) { if (control.options[x].selected) { if (0 == result) { result = control.options[x].value; } else { result = 0; ok = false; } } } } } else if (snapIsClosed(varName)) { var numCodes = snapNumCodes(varName); var ok = true; for (var x = 1; (x <= numCodes) && ok; x++) { var control = snapObject(varName + '_' + x); if (control && control.checked) { if (0 == result) { result = control.value; } else { result = 0; ok = false; } } } } if (0 == result) { result = NaN; } return result; } //////////////////////////////////////////////////////////////////////////////// // Date and Time function FormatDate(Date) { var dateString = ""; if (1) { dateString += Date.getDate()+"/"; dateString += (1 + Date.getMonth()); } else { dateString += (1 + Date.getMonth())+"/"; dateString += Date.getDate(); } dateString += "/" + Date.getYear(); return dateString; } // Date and Time function FormatTime(Time) { var timeString = ""; var tempStr = Time.getHours().toString(); if (tempStr.length == 1) tempStr = "0" + tempStr; timeString += tempStr + ":"; tempStr = Time.getMinutes().toString(); if (tempStr.length == 1) tempStr = "0" + tempStr; timeString += tempStr + ":"; tempStr = Time.getSeconds().toString(); if (tempStr.length == 1) tempStr = "0" + tempStr; timeString += tempStr; return timeString; } // Date and Time function GetToday() { var Now = new Date; var Today = new Date(Now.getYear(), Now.getMonth(), Now.getDate()); return Today; } // Date and Time function getMonthName(i) { var month = ""; switch (i) { case 0: month="January";break; case 1: month="February";break; case 2: month="March";break; case 3: month="April";break; case 4: month="May";break; case 5: month="June";break; case 6: month="July";break; case 7: month="August";break; case 8: month="September";break; case 9: month="October";break; case 10: month="November";break; case 11: month="December";break; } return month; } // Date and Time function GetNow() { var Now = new Date; Now.setFullYear(1970, 0, 1); return Now; } //////////////////////////////////////////////////////////////////////////////// // Code Rotation function getOrder(numCodes) { var arr=new Array(numCodes); var numbers=new Array(numCodes); var i = 0; for (i=0; i<numCodes; i++) { numbers[i]=i; } for (i=numCodes ; i > 0; i--) { var ran = Math.round(Math.random() * i); if (ran == i) ran = 0; arr[i -1] = numbers[ran]; //numbers.splice(ran, 1); for (j = ran; j< (i-1); j++) numbers[j] = numbers[j+1]; } return arr; } // Code Rotation function getRotatedOrder(numCodes, forwards) { var arr=new Array(numCodes); for (var i=0; i<numCodes; i++) { if (forwards) { arr[i]= (i - rotationKey)%numCodes; if (0 > arr[i]) arr[i] += numCodes; } else { arr[i]= (i + rotationKey)%numCodes; } } return arr; } // Code Rotation function getInvertedOrder(numCodes) { var arr=new Array(numCodes); var inverted = ((rotationKey%2) == 0); for (var i=0; i<numCodes; i++) { if (inverted
Url
/suhtapps/Surveys/portsmouth_hospitals_health_survey_08.htm
UHS Patient Hub - frequently asked questions
Description
We’re making things easier for you to manage your appointments online We use the secure online portal Patient Hub, allowing you to CONFIRM, REQUEST TO REBOOK or CANCEL your hospital appointments. You can access important information in one place, all from your smart phone, tablet or computer. POWERED BY NETCALL PATIENT HUB Q What is Patient Hub? A secure online portal which allows you to access all of your appointment information in one place, by using your smart phone, tablet or computer. You’ll be able to confirm, rebook or cancel your hospital appointments. Patient Hub will also provide hospital maps and any extra appointment brochures. Q Why am I being offered this new appointment reminder service? The Trust is offering more communication choice to patients and working hard to become more efficient and sustainable. By improving our communication with you, you will have all your appointments in one place and are less likely to miss one. As part of our Net Zero (carbon neutral) promise, this will avoid unnecessary printing and postage. Q Do I need to create a Patient Hub account? No, all patients with a registered mobile number and/or email address will automatically have access to this service. You will be sent a notification when we book you an appointment. This service relies on communicating with you via text message and/or email, so it’s important to check that we have an up to date mobile phone number and email address when you next visit. POWERED BY NETCALL PATIENT HUB Q&A Q How do I access my account? The hospital will send you a link by text message or email. You must then follow these steps: 1. Click on the link 2. You’ll be asked to enter either your mobile number or email address, together with your date of birth. 3. You will then be sent a 6-digit authentication code by SMS, or by email if we don’t have your mobile number. 4. Enter the 6-digit code. Please be aware this secure code only lasts for two and a half minutes. 5. Then you are securely logged in to Patient Hub. Patient Hub has clear log in instructions for you to follow. After that, you can go back at any time. To get to Patient Hub, you can use the link in the text message, the link in the appointment you added to your diary, or from the Patient Hub page on the hospital website. POWERED BY NETCALL PATIENT HUB Q&A Q What information will I get from Patient Hub? Patient Hub allows you to view all of your appointments, letters and messages in one convenient location. As well as access to all your appointment information, giving you the ability to confirm, rebook or cancel your hospital appointments, Patient Hub will offer you much more. It will provide everything you would normally receive in the post. Q Do I need to download the Patient Hub as an app from an app store? No, there is no need to download anything. When the hospital sends you the first appointment notification, they will send you a link. Patient Hub is a web page that you can access at any time. For easy future access, perhaps you want to save this link as a favourite. Each time you sign in, you will also be sent a 6-digit security code. The next time you log in, you will get a new 6-digit code. There is no need to remember a user name and password. POWERED BY NETCALL PATIENT HUB Q&A Q Is the link always the same? Yes, the link to your account will stay the same, so you can go back to any text message or email. Every time you are notified about an appointment you will get a reminder of the link. If you want to go back into your Patient Hub, just use that link. Or, for easy future access, your device should allow you to save the link as a favourite. Q Can I only use the link they send me in the text message or email to access it? No, you can also use the QR code on this leaflet or go to the Patient Hub page on the hospital website. Q What authentication does Patient Hub use? Patient Hub uses two factor authentication. You begin the login process by giving us some personal information known to you. To complete the log in process, you will be sent a 6-digit security code by text message, or by email. This code can only be used once. The next time you log in, you will get a new 6-digit code. POWERED BY NETCALL PATIENT HUB Q&A Q Do I need to remember a user name and password? No, you do not have a user name or password. Q Do I need to securely log in each time I access Patient Hub? Yes, it is important to keep your data secure. The code via text message or email is very fast. Q Is this service secure? Yes, the service is designed with security in mind. The text message or email regarding your appointment will be sent to you by the hospital. Once you click on the link, you will be asked for two forms of identity, to check it really is you. This will be either your mobile number or email address and your date of birth. This information, coupled with a 6-digit authentication code, forms the secure 2-factor authentication. Q How will I get my appointment information? You will get a text message or email with a link. When you click through to Patient Hub you’ll see the appointment tab on the first page you see. Click on ‘Appointments’ to see information on your current appointments and their status. From here, you can accept, request to rebook or cancel your appointments. POWERED BY NETCALL PATIENT HUB Q&A Q Can I change my appointment? Yes, you can either accept, request to rebook or cancel your appointment. If you have accepted an appointment, you can go back in and rebook or cancel the appointment at a later date. Q Can it help me with a diary reminder? Yes, you can click on a diary button to insert a reminder into your smart phone or computer calendar. Q Do I need to enrol to get this service? No, as long as we have a mobile number and/or email address registered with the hospital, the hospital will send you a text message or email (or both). You’ll be able to choose how you are notified if you have a preference between text or email. It is important that you make sure we have your correct contact details. Q Can everyone use Patient Hub? Yes, it is accessible to anyone with a smart phone, tablet or computer. Q How long do I have to respond to the text message or email? The link to your Patient Hub can be accessed at any time. When you log in you will be sent a secure authentication message to complete your log in. This secure code only lasts for two and a half minutes. POWERED BY NETCALL PATIENT HUB Q&A Q What happens if I do not respond to the text message link or authentication code I receive? If you do not respond to the notification, you will be sent a further two reminder notifications. If you do not respond to any of the notifications, your appointment letter will be posted to you. Q How do I access Patient Hub if I have accidentally deleted the text message from my phone? There is a link in your diary reminder and a link on the hospital website that directs you to Patient Hub. Q I clicked on ‘rebook’ but I haven’t had a call back yet The hospital booking centre agents will call you as soon as they have availability. Q I cancelled my appointment using Patient Hub. How do I know it has been cancelled? You will receive a call back from the hospital to confirm your cancellation. POWERED BY NETCALL PATIENT HUB Q&A Q What if I don’t have a smart phone, tablet or computer? The initial link needs either a smart phone, tablet or a computer. If you do not have a smart phone you can receive the link and authentication code in an email. You need access to either email or text messages to use Patient Hub. If you don’t have a smart phone or computer, don’t worry, you will continue to receive your appointment details by letter in the post, together with all the other information. Q What happens if I want to opt out, or still want to receive a letter in the post? You can access the link to opt out of future communications on Patient Hub. Opting out also means you will not receive any appointment reminders. Q Will all my appointment letters be sent using Patient Hub? Yes, all letters and other extra information will be sent via Patient Hub. You can read them as often as you like. Q How will I know where to go when I arrive? Patient Hub has maps to download to your smart phone, tablet or computer. POWERED BY NETCALL PATIENT HUB Q&A Q Will I receive follow-up appointments letter from Patient Hub? Yes, all appointment letters and information will be sent via Patient Hub. Q What if I have more than one appointment? You will be able to see all of your appointments in Patient Hub. You can manage (accept, request to rebook or cancel) each appointment individually. Q Can I look back at previous appointments? Yes, your previous appointment data is securely held in your space for 24 months. POWERED BY NETCALL This QR code takes you to the hospital Patient Hub web page for information about how to use Patient Hub. POWERED BY NETCALL
Url
/Media/UHS-website-2019/Docs/For-patients/UHS-Patient-Hub-frequently-asked-questions.pdf
NIHR RTB_IBHO_PIS-ICF_v1.4_12SEP2024_Localised
Description
PARTICIPANT INFORMATION SHEET Improving Black Health Outcomes (IBHO) NIHR BioResource Version 1.4, 12 Sep 2024 Reading time: 20 minutes This is a detailed document outlining why we are inviting you to join the National Institute for Health and Care Research (NIHR) BioResource through a research project called Improving Black Health Outcomes (IBHO), known as the IBHO BioResource. We understand your time is valuable, however, we would encourage you to take the time to read all the information before deciding whether you would like to get involved. Please feel free to ask if you have questions or would like more information. You can also visit: www.bioresource.nihr.ac.uk/ibho Taking part in research is completely voluntary and your decision will not in any way affect your healthcare. You can also withdraw from taking part at any time. More information on this can be found in this document in Section 1 & 2. Contents: Section 1: Why we are asking you to join this research project Section 2: Who manages and funds the project Section 3: What to expect from taking part Section 4: Consent form *If you need this information to be translated into another language or in a different format, please speak to a member of the NIHR BioResource team. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 1 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 Section 1 Why am I being asked to join the IBHO BioResource? We are inviting people from Black communities, with and without health conditions, to join the IBHO BioResource. For the IBHO BioResource, Black communities refers to individuals who are from the following ethnic backgrounds: Black African, Black Caribbean, Black African-Caribbean, Black British, Black Welsh, Black Irish, Black Scottish, Dual or Mixed Black heritage, and/or Black ‘other’. We recognise that individuals who are not from Black communities may also live with a health condition of interest to the IBHO BioResource, such as Sickle Cell. To help us better understand these conditions, we are inviting patients of any ethnicity with certain health conditions to join our programme. Your contribution will help us improve understanding, treatment and ultimately outcomes for all individuals affected. What is the aim of the IBHO BioResource? Health research studies have rarely focused on the specific health needs and experiences of people from Black communities. This can be problematic since the findings might not always apply to everyone equally. As a result, people from Black communities have often not benefitted from advances in health research. By creating the IBHO BioResource we hope to change this, so that in future, when researchers find something important, for example, a gene that relates to a health condition, we can be sure that this is true for Black communities too. The IBHO BioResource will be a resource to support health research. We will create this resource by collecting information from your sample (e.g., genetic data), information from health records (e.g., use of medication), personal information (e.g., age, gender), and lifestyle (e.g., diet, smoking), and social factors (e.g., housing, employment). Why is the IBHO BioResource important? The IBHO BioResource will enable research into a range of health conditions. These include: • conditions that are common in UK-based Black communities such as diabetes, • conditions that almost exclusively affect Black people such as sickle cell disorder, • conditions that are not well researched in UK-based Black communities such as anxiety, depression, and skin problems. We aim to improve our understanding of: a) how and why some health conditions occur in Black communities, Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 2 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 b) what are the best assessments to accurately identify these conditions in Black people, and, most importantly, c) how we can use the research findings to improve and/or develop interventions and treatments that are tailored to the specific needs and health experiences of Black communities. Do I have to join the IBHO BioResource? No. Your decision is voluntary, and it is completely up to you to decide whether you wish to take part. If you decide not to join, your decision will not affect the healthcare you receive in any way. If you join, you will be free to withdraw at any time, without having to give a reason. Section 2 Who manages and funds the IBHO BioResource? The IBHO BioResource forms part of the NIHR BioResource Research Tissue Bank. The IBHO BioResource is a collaboration between the NIHR Maudsley BioResource Centre at King’s College London, led by Professor Gerome Breen and Dr Juliana Onwumere (IBHO project Co-Principal Investigators), the NIHR BioResource, which is led by Professor John Bradley (Chief Investigator) and Dr Nathalie Kingston (Director), and Genomics England, led by Professor Matt Brown (Chief Scientific Officer) and Dr Sara Trompeter (Clinical lead for Sickle Cell, Diverse Data). The NIHR BioResource and NIHR Maudsley BioResource Centre is funded by the National Institute for Health and Care Research (NIHR). Genomics England is funded by the Department of Health and Social Care (DHSC). Research such as this must be approved by a research ethics committee. The NIHR BioResource has been approved by Cambridge Central Research Ethics Committee. What is the NIHR BioResource Research Tissue Bank? The NIHR BioResource is a panel of hundreds of thousands of volunteers, with and without health conditions, who wish to participate in health research. Volunteers joining the BioResource are asked to donate a small blood or saliva sample and give consent to be invited to participate in health-related research studies. Invitations are based on data gathered from samples and information volunteers have provided. Information and samples that the BioResource holds may also be made available to researchers working in biomedical and healthcare research. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 3 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 What is Genomics England’s National Genomic Research Library? The National Genomic Research Library (the ‘Library’) is a secure national database of deidentified genetic and health data from people in the UK, managed by Genomics England. We are inviting you to join the ‘Library’, to help us learn more about genes and health, so we can improve healthcare for everyone in the future. You can choose not to join the ‘Library’ and still join the IBHO BioResource. If you choose to opt-in, the IBHO team may share your sample and data with Genomics England depending on the analysis that will be done (e.g., whole genome sequencing). The NIHR BioResource will also share a copy of your signed consent form with Genomics England. Section 3 What will happen if I agree to take part in the IBHO BioResource? 1. If you are interested in participating, you will be asked to read and sign the consent form at the end of this document, and you will be given a copy to keep. 2. After providing your written permission to take part, you will be asked to complete a questionnaire that will ask some questions about yourself and your health experiences. You can choose to complete it either by yourself or with a member of the healthcare or research team using a paper format or online. This will take approximately 20 minutes. 3. To facilitate this important health research, we also request consent to link to your health and social care records. Using these linkages, we can investigate how health experiences and treatment can affect your healthcare and other areas of your life, such as education and employment. You will be asked to provide a blood or saliva sample, depending on your preference. This will involve taking blood from you via a needle in your arm like during a blood test or swabbing the inside of your cheek/spitting into a tube. 4. We will offer you a £15 voucher and cover travel costs incurred outside of routine clinical appointments up to the value of £22.50 for joining the IBHO BioResource. 5. As a participant of the IBHO BioResource, and based on the information you provide, you may receive invitations to other studies you can take part in, and you can decide whether to do so. You will be invited to a maximum of eight studies per year (four face-to-face and four online). Participation in further studies will always be optional and voluntary. If applicable, we can contribute towards your travel costs to take part in further studies. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 4 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 Some studies may not require any further input from you as the data or samples you provided previously will be enough. What are the potential benefits of taking part in IBHO? There are no immediate benefits to taking part in the IBHO BioResource. However, some people welcome the opportunity to be involved in a new project and contributing to new knowledge that might lead to better future healthcare for individuals. We will keep participants who opt in on the Data Collection Sheet up to date with progress via a yearly newsletter. What are the potential disadvantages/risks? Some of the study questionnaires include sensitive questions about health conditions, experiences of using health services, and other topics. You do not have to complete any questions that you do not wish to answer, and you can always approach a member of the clinical or IBHO BioResource team for further clarification if anything is unclear. Providing a saliva sample involves spitting into a tube that some people find unpleasant. Giving a blood sample can sometimes cause discomfort, and a small bruise may develop. Only trained staff will collect samples and will be happy to answer any questions, respond to any concerns you might have and provide reassurance. What will happen to the samples I give? We will extract DNA (deoxyribonucleic acid) from your blood or saliva sample in various ways to study your genetic makeup. This can include methods such as whole genome sequencing of your DNA. For specific projects, we will also test other parts of your blood, such as cells, RNA (ribonucleic acid), proteins and metabolites. Your samples will be labelled with a unique number before being transferred to the laboratory for testing, so that laboratory staff will not know your name or any personal information. Your samples will be kept in a secure location. Why are you collecting my genetic data (DNA)? Genes are made up of DNA. The genetic code of your DNA can provide a picture about risks of disease development, and can, together with lifestyle data, help us research and understand potential changes that affect health risks. Can I know the results obtained from my samples? The BioResource does not provide a report or feedback on any genetic or laboratory results obtained from your sample, as it is taken for research purposes only. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 5 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 Will any of the results obtained with my sample predict the risk of disease? The BioResource supports studies that may discover genetic links to certain diseases. While it is unlikely that the sample of a single person can predict disease risk, looking at data and samples in large numbers helps us find patterns and trends. It may be years before these discoveries can be used to predict the risk of disease or the risk of a complication from a known disease. If you are contacted to take part in a future study, this does not mean that your health is at risk. Genetic differences between individuals can either protect against or increase the risk of developing a disease. We are a long way from fully understanding the complete picture of how genes and environmental factors (e.g., lifestyle) affect the risk of disease. Some of the studies the IBHO BioResource may invite you to take part in could reveal unexpected/previously unknown health conditions or future health risks. You will be able to decide if you want to be invited to these types of studies. What happens if an invention is made using my sample? Your samples and related information are donated as a gift for research. If an invention is made from the research undertaken with your sample or data, you will not receive any compensation, recognition or payment for your valuable contribution. Any researchers who publish studies that use IBHO BioResource and/or ‘Library’ data are required to thank IBHO participants for their contribution. The BioResource and/or the ‘Library’ will not share your sample to make a profit. Will my details be kept confidential and secure? Yes. Best ethical and legal practices will be followed to ensure that all information collected about you will be handled safely and securely. Data about you (e.g., personal details and health information) will be stored in secure electronic databases. Any information from genetic and other tests will be stored separately from your personal details. Only authorised members of the NIHR BioResource or Genomics England can access your personal details (for example, to invite you to take part in other research studies). Information about you will not be used or shared for any purpose other than for research. We do not share any data with insurance companies. We also do not share data with governmental organisations, unless they have a research purpose. An explanation of how the BioResource complies with the Data Protection Act 2018 and UK General Data Protection Regulation (UK GDPR) can be found at the end of this document. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 6 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 Data linkage for health and social care records For data linkage for important information about your health, and where necessary education and social records, the IBHO BioResource or ‘Library’ team will securely link your data directly with the database managers at, for example, the NHS or Office for National Statistics. Only individuals with approved qualifications, including on data security can do this linkage. This will be via secure transfer that meets NHS and/or Government data security standards. How will researchers use data within the IBHO BioResource and/or the ‘Library’? IBHO BioResource Researchers must apply, and receive approval, to access your samples or data. Researchers can only request data that is relevant and specific to their project. Research applications are discussed by our Data Access Committee or Steering Committee, who use a set of principles to decide whether the application is acceptable. This is referred to as ‘managed access’. Requests could come from researchers from the public and charitable sector (Universities, Research Institutes), or from commercial and pharmaceutical companies. These can be based either in the UK or overseas. Data may be accessed in several ways, for example, by logging in to secure data analysis environments or by downloading it from the BioResource. Researchers are legally bound to keep your data secure by accepting the terms of an agreement, this includes not attempting to identify you. Researchers can publish the results of their studies in reports or publications which are available on the internet and in journal articles. Under no circumstances will information that identifies you or any other participant be disclosed. Published studies are available to view on the NIHR BioResource website https://bioresource.nihr.ac.uk/studies/. National Genomic Research Library As in the BioResource, researchers can apply to use samples and data from the ‘Library’ in a format that does not identify you, to study diseases and look for new treatments. Researchers may come from all over the world, and they may work for not-for-profit organisations, such as research charities, universities, or hospitals, and commercial companies such as drug or technology companies. They will only have access to your deidentified (pseudonymised) data in the National Genomic Research Library, and only if their application to access your data is approved by Genomics England. Your samples and data will be kept securely. Your data cannot be taken out of the ‘Library’ and any results of research cannot be used to re-identify you. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 7 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 What if I no longer wish to be a member of the IBHO BioResource and/or the National Genomic Research Library? You are free to withdraw from the IBHO BioResource and/or the National Genomic Research Library at any time, without giving a reason. If you would like to withdraw, simply contact the IBHO BioResource team by email or phone. If you choose to withdraw, there are two options: 1. Full withdrawal: You can ask us to stop further use of your data and to destroy your remaining samples. Any research that has used your data or sample(s) cannot be undone. 2. Partial withdrawal: You can allow us to continue accessing your healthcare records (and any required social and educational records) from central NHS records, your hospital, your GP, school and/or research done with your sample, but we will not contact you about future research. Your personal information will be retained in an archive so that a record remains of your initial consent and the withdrawal process. If the BioResource is unable to confirm your decision, your sample(s) and data will be retained for future use, and you will not be contacted again. Contact information If you require further information before deciding to join the IBHO BioResource, or have any queries, please feel free to contact the BioResource team on 0800 090 2233 or email us on ibho@bioresource.nihr.ac.uk. General Data Protection Regulation (UK GDPR) Here, we explain how we comply with the Data protection Act 2018 and UK General Data Protection Regulation (UK GDPR). Please also read our Privacy Notice: https://bioresource.nihr.ac.uk/media/04nhduml/privacy-notice-v2.pdf, which explains what we do with the information we hold about you, how you can request access to this personal data, and your other data rights. Cambridge University Hospitals NHS Foundation Trust (CUH) is the organisation responsible for managing the NIHR BioResource Research Tissue Bank, including the IBHO BioResource. We will be using information from you, and your healthcare, social care and education (if required) records in order to support research studies, and CUH will act as the data controller for the information we hold. We are responsible for looking after your information and using it properly. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 8 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 We will keep identifiable information about you for 10 years after the programme has finished, and we may approach you to extend this. How will we use information about you? The IBHO BioResource and/or Genomics England asks to use information from you, from your medical records, including from your GP, hospital records and other health-related central records. The NIHR BioResource will also ask to access your social care and, if required, your education records. This information will include your: • Full name; • NHS/CHI number; • Date of birth; • Contact details, including address, phone number and email address; • Name and contact details of your GP; • Health-related information, e.g., on your lifestyle, medical history, medication etc; • Social care and education information, e.g., level of education; • Genetic information that will be generated from your blood or saliva samples or provided by, for example, NHS health-related central records, disease registries etc. • Electronic copies of all your past and future records from the NHS, your GP and other organisations (such as NHS England and other Public Health bodies); • Information about any illnesses or stays in an NHS hospital; • Copies of hospital or clinic records, medical notes, social care, and other local or national disease registries; • Relevant images from your NHS or other records, such as MRI scans, X-rays, or medical photographs; • Data from other research registries and studies that may be relevant (but only where you have given them your permission to share that information). Information about you, but not your personal identifiable information, will be sent to approved researchers in other countries worldwide. They will not be able to see your name, NHS/CHI number, date of birth or contact details (which are your “personal identifiable information”). Your data will be de-identified and have a code number instead. They must follow our rules about keeping your information safe (see the section about ‘Managed access’). If and when the IBHO BioResource finishes, we will keep some of the data so we can check the results. We will write our reports in a way that ensures no-one can work out that you took part in the study. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 9 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 What are your choices about how your information is used? • You can stop being part of the study at any time, without giving a reason as explained in the 'Withdrawal process’ section above. • You may request a copy of the information we hold about you; • You can request changes in some of the information we hold about you (for example, your contact details and contact preferences); however, we won’t be able to change other data we hold about you (such as your genetic information). Where can you find out more about how your information is used? You can find out more about how we use your information • On the Health Research Authority website www.hra.nhs.uk/information-aboutpatients/ • The NIHR BioResource privacy notice, available from https://bioresource.nihr.ac.uk/media/04nhduml/privacy-notice-v2.pdf which includes the contact details of the Data Protection Officer at CUH; • Genomics England’s privacy notice available from https://www.genomicsengland.co.uk/privacy-policy • By asking one of the IBHO BioResource research team; • By sending us an email at ibho@bioresource.nihr.ac.uk; • By calling us on Freephone 0800 090 2233. Thank you for reading this information sheet and for considering joining the IBHO BioResource If you would like independent advice please contact: Patient Support Services, C Level Centre Block, Mailpoint 81, Southampton General Hospital, Tremona Road, Southampton, SO16 6YD. Telephone on 023 8120 6325 or Email at patientsupportservices@uhs.nhs.uk Principal Investigator Prof Saul Faust, National Institute of Health Clinical Research Facility Director, University Hospital Southampton NHS Foundation Trust, MP 218, Level C, West Wing, Tremona Road, Southampton, SO16 6YD. Telephone: 023 8120 4989. Southampton BioResource Centre Coordinating Team NIHR Southampton Clinical Research Facility (CRF) study team, University Hospital Southampton NHS Foundation Trust, MP 218, Level C, West Wing, Tremona Road, Southampton, SO16 6YD. Telephone: 023 8120 4989. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 10 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF v1.4, 12/SEP/2024 Attach barcode here PARTICIPANT CONSENT FORM The IBHO BioResource, part of the NIHR BioResource Research Tissue Bank Please initial box 1. I confirm that I have read (or had read to me) the information sheet version 1.4, dated 12/SEP/2024. I have had the opportunity to consider the information, ask questions and have these answered satisfactorily. 2. I understand that my participation is voluntary and that I am free to withdraw at any time, without giving any reason, and without my medical care or legal rights being affected. 3. I agree that the IBHO BioResource may access my medical, health, social care, and educational (if required) records held by public bodies, and to analyse and store this information long-term. I understand that this may include the provision of information about my health status. I understand that in order to access these records, identifiable personal details – like name, NHS number, date of birth will be sent to these public bodies. 4. I agree to give blood or saliva for health-related research. I understand that my samples and data may be shared to support future research, including commercial studies. I understand my samples will be tested, and that this may include the reading of my entire genetic code. I understand my samples will be stored long-term. 5. I agree to provide personal and contact details. I agree to provide information for example, through the completion of questionnaires. I agree to be contacted by the BioResource to invite me to participate in other research studies. 6. I understand that relevant sections of my medical/health related, social care and education (if required) records and data collected during the study may be looked at by approved individuals for auditing and monitoring purposes. I give permission for this. 7. I understand my samples and de-personalised data may be shared with researchers through a ‘managed access’ process. 8. I understand that my samples are taken for research, and the BioResource will not feed back any genetic or other test results. Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 11 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF V 1.4, 12 SEP 2024 When completed: 1 for participant; 1 (original) for researcher site file; [1 to be kept in medical notes (optional – delete as required)]. 9. I agree to join the IBHO BioResource, which is part of the NIHR BioResource Research Tissue Bank. OPTIONAL CONSENT TO THE NATIONAL GENOMIC RESEARCH LIBRARY Please put your initials in the box This section gives you the choice to opt-in to the National Genomic Research Library. Please initial box 10. I understand that my sample and data may be held in the National Genomic Research Library, managed by Genomics England. I am happy for Genomics England to obtain additional data from the NHS and other public registries. I give my permission for approved researchers to access my data for research. I understand I can withdraw from the National Genomic Research Library at any time. I agree for my sample and data to be held by the National Genomic Research Library. ……………………………………………. Participant: First Name and Surname (BLOCK CAPITALS) ……………… ……………………… …………….. Date of Birth Signature Date ……………………………………………………………… Person receiving consent: First Name and Surname (BLOCK CAPITALS) ……………………… ……………... Signature Date Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 12 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF V 1.4, 12 SEP 2024 When completed: 1 for participant; 1 (original) for researcher site file; [1 to be kept in medical notes (optional – delete as required)]. WITNESS/TRANSLATOR STATEMENT: If participant is not able to read the text and/or sign for themselves but has capacity to give consent OR if the Participant Information Sheet and Consent Form has been translated. Witness/translator [to delete either as appropriate]: I witnessed accurate reading of the consent form to the potential participant, who could ask any questions and received satisfactory answers or I was present during the meeting between [insert name] and the participant. I translated for the participant the Participant Information Sheet and the Consent Form. I confirm that they gave their consent freely. ……………………………………………………. Witness/translator: First Name and Surname (BLOCK CAPITALS) ……………………… …………….. Signature Date FOR WITNESS AND/OR TRANSLATOR USE ONLY Website: https://bioresource.nihr.ac.uk/ Email: ibho@bioresource.nihr.ac.uk Page 13 of 13 IRAS ID: 313104 NIHR RTB IBHO PIS-ICF V 1.4, 12 SEP 2024 When completed: 1 for participant; 1 (original) for researcher site file; [1 to be kept in medical notes (optional – delete as required)].
Url
/Media/Southampton-Clinical-Research/Downloads/NIHR-RTB-IBHO-PIS-ICF-v1.4-12SEP2024-Localised.pdf
Papers-CoG-24.07.2024
Description
Date Time Location Chair Agenda Council of Governors 24/07/2024 14:00 - 16:00 Conference Room, Heartbeat/Microsoft Teams Jenni Douglas-Todd 1 Chair’s Welcome and Opening Comments 14:00 2 Declarations of Interest 14:02 3 Minutes of Previous Meeting 14:03 Approve the minutes of the previous meeting held on 1 May 2024 4 Matters Arising/Summary of Agreed Actions 14:05 5 Strategy, Quality and Performance 5.1 Chief Executive Officer's Performance Report 14:08 Receive and note the report Sponsor: David French, Chief Executive Officer 5.2 Operating Plan 14:28 Receive and note the report Sponsor: Ian Howard, Chief Financial Officer 5.3 Annual Report Update - Oral 14:48 Sponsor: David French, Chief Executive Officer Attendee: Craig Machell, Associate Director of Corporate Affairs and Company Secretary 14:53 Break 6 Governance 6.1 Appointment of Lead Governor 15:03 Note the appointment of the new lead governor Sponsor: Jenni Douglas-Todd, Trust Chair Attendee: Karen Russell, Council of Governors' Business Manager 6.2 Confirmation of Election of the Membership and Engagement Working 15:05 Group Chair Confirm the appointment of the new Membership and Engagement Working Group Chair Sponsor: Jenni Douglas-Todd, Trust Chair Attendee: Karen Russell, Council of Governors' Business Manager 6.3 Governors' Nomination Committee Terms of Reference 15:07 Approve the proposed changes to the Governors' Nomination Committee Terms of Reference Sponsor: Jenni Douglas-Todd, Trust Chair Attendees: Craig Machell, Associate Director of Corporate Affairs and Company Secretary and Karen Russell, Council of Governors' Business Manager 7 Membership Engagement and Governor Activity 7.1 Membership Engagement 15:17 Receive the report Sponsor: Jenni Douglas-Todd, Trust Chair Attendee: Sam Dolton, Events and Membership Officer 7.2 Annual Members' Meeting Update - Oral 15:27 Receive the update Sponsor: David French, Chief Executive Officer Attendee: Sam Dolton, Events and Membership Officer 7.3 Governors' Nomination Committee Feedback 15:32 Chair: Jenni Douglas-Todd, Trust Chair 7.4 Feedback from Strategy and Finance Working Group 15:34 Chair: Mandy Fader 7.5 Feedback from Patient and Staff Experience Working Group 15:39 Chair: Sandra Gidley 7.6 Feedback from Membership and Engagement Working Group 15:44 Chair: TBC 8 Review of Meeting 15:49 Review and feedback on the content of this meeting Sponsor: Jenni Douglas-Todd, Trust Chair 9 Any Other Business 15:54 Raise any relevant or urgent matters that are not on the agenda 10 Date of Next Meeting: 23 October 2024 15:59 Note the date of the next meeting Page 2 Minutes - Council of Governors (CoG) Open Session Date Time Location Chair Present In attendance Apologies 1 May 2024 14.35-16:30 Conference Room, Heartbeat Education Centre and Microsoft Teams Jenni Douglas-Todd, Trust Chair Jenni Douglas-Todd, Trust Chair Shirley Anderson, Elected, New Forest, Eastleigh and Test Valley Katherine Barbour, Elected, Southampton City Patricia Crates, Elected, New Forest, Eastleigh and Test Valley Helen Eggleton, Hampshire and Isle of Wight Integrated Care Board (ICB) Professor Mandy Fader, Appointed, University of Southampton Lesley Gilder, Elected, Southampton City Sathish Harinarayanan, Elected, Medical Practitioners and Dental Staff Sandra Gidley, Elected, New Forest, Eastleigh and Test Valley Jenny Lawrie, Elected, Southampton City Kelly Lloyd, Elected, Health Professional and Health Scientist Staff and Lead Governor Brian Lovell, Elected, Rest of England and Wales Esther O’Sullivan, Elected, New Forest, Eastleigh and Test Valley Catherine Rushworth, Elected, Isle of Wight Liz Taylor, Elected, Non-Clinical and Support Staff Councillor Victoria Ugwoeme, Appointed, Southampton City Council Professor Emma Wadsworth, Appointed, Solent University Mike Williams, Elected, New Forest, Eastleigh and Test Valley Peter Baker, Commercial and Enterprise Director (for item 6.3) Jessica Burnett, Associate Governor Tracey Burt, Minutes Martin De Sousa, Director of Strategy and Partnerships (for item 5.2) Sam Dolton, Events and Membership Officer Craig Machell, Associate Director of Corporate Affairs and Company Secretary Neylia Mustafapour, Associate Governor Karen Russell, Council of Governors’ Business Manager Joe Teape, Chief Operating Officer (for item 5.1) Theresa Airiemiokhale, Elected, Southampton City Linda Hebdige, Elected, Southampton City Councillor Edward Heron, Appointed, Hampshire County Council Jake Smokcum, Elected, Nursing and Midwifery Staff Quintin van Wyk, Elected, Rest of England and Wales JDT SA KB PC HE MF LG SH SG JL KL BL EO CR LT VU EW MW PB JB TB MDeS SD CM NM KR JT TA LH EH JS QvW 1 1 Chair’s Welcome and Opening Comments The Chair welcomed everyone to the meeting. 2 Declarations of Interest There were no new declarations of interest related to matters on the agenda. 3 Minutes of Previous Meeting The minutes of the meeting held on 31 January 2024 were approved as an accurate record, after the 4th bullet point of item 5.1 was amended to read: • CR said that many families from the Isle of Wight (IoW) travelled to the mainland to use maternity services and she was extremely concerned that the facilities at PAH were already stretched, without additional patients being sent from Winchester. She felt strongly that it would be inappropriate to send IoW patients to maternity units that were even further away from the island and she said that PAH staff were already fearful of the pressures to come. She queried whether additional staff were being recruited and whether the facilities would be improved to accommodate more patients. 4 Matters Arising/Summary of Agreed Actions The updates on the summary of actions in the paper were noted. 5 Strategy, Quality and Performance 5.1 Chief Executive Officer’s Performance Report JDT welcomed JT to present the performance report on behalf of David French, CEO, who was attending a meeting in London. He highlighted that: • NHSE had granted UHS a one-off cash payment of £24.6m (due partly to the successful delivery of the improvement in its forecast position), which meant that the forecast deficit of £27m for 2023/24 had reduced to £4.5m. • cost savings of £63m had been achieved in 2023/24. • the Trust had delivered £75m of capital development during the year, which had included the opening of new wards and the building of the sky bridge. • 118% of 2019/20 levels of elective, day case and outpatient first attendances had been delivered in 2023/24, against a target of 113%. • UHS should be proud of its performance against other university teaching hospitals. The Emergency Department’s performance had remained in the top quartile for the whole year and significant progress had also been made in treating those who had waited the longest for treatment. • one of the Trust’s biggest risks during 2024/25 was the lack of funding for social care within the community and he noted that there were currently 238 beds occupied by those waiting to be discharged. JT advised that the Trust was looking for more strategic solutions and was working with its partners across the integrated care system, to improve the position. The following comments/queries were raised by governors: • it was encouraging to see the number of performance targets showing as green in the report. • it was interesting to hear that UHS was in the top quartile for many performance targets, even when they showed as red in the report and it gave an indication of the significant challenges all Trusts were facing. JT advised that the Trust had a strong focus on prioritising patients based on clinical need. He also noted that there was a weekly meeting to review those patients who had been on waiting lists the longest. • how staff remained motivated when it felt as though they were treading water? JT advised that staff delivered amazing results, against all the odds and he hoped that motivated them. 2 • what was being done to reduce the number of patients who did not meet the criteria to reside? JT advised that there were improvements that could be made, such as ensuring that patients were on the right clinical pathway and that the number of failed discharges reduced (e.g. transport not booked, medication delays). • SH asked what had been included in the £63m Cost Improvement Programme. JT advised that it had included additional income earned, vacancies held and a series of recurrent savings (e.g. length of stay, outpatient improvements, procurement savings and improved theatre productivity). • EW noted that the report referenced the challenging work environment and she asked whether staff were involved in putting together measures to address the concerns. JT advised that there had been a discussion at Trust Board regarding staff morale and that lots of things had been tried to provide improved support, e.g. the Wellbeing Hub, the PAH roof garden and staffroom refurbishments. He said that the Trust was keen to encourage a long-term, ground up, philosophy and wanted to create an environment in which its staff could thrive. • that many staff were tired and run down, following the pandemic and had not had a chance to recover. Whilst facilities like the Wellbeing Hub were good, staff needed to be allowed time (during the working day) to access them. • many staff believed that they were identifiable through bar codes/reference numbers on staff survey forms, which were meant to be anonymous. It was suggested that the response rate would improve, if they were removed. • KB asked whether governors were aware that there was an issue regarding Band 2 staff, who were seeking to be regraded to Band 3. JT advised that it was a national issue in respect of Band 2 Health Care Assistants who were working at a Band 3 level. He said that UHS wanted people to be paid the right amount for the work they did and Steve Harris, Chief People Officer, was involved in discussions across HIOW, to reach a unified position. • KB noted the importance of people connecting with nature and the positive effect that being able to see greenery from a hospital bed, could have on patients. She queried whether it would be possible to have TV screens on wards, showing scenes of the countryside. • KB advised that the Catholic Home Care service (which had supported many people across the city) was to close, increasing pressure on other services. Actions: • the governors were keen to express their thanks to the staff for the sterling work they did and JT was asked to consider how that message could be shared across the organisation. • JDT agreed to ask Steve Harris, Chief People Officer, to provide governors with an update regarding the situation with Band 2 staff. 5.2 Corporate Objectives 2024/25 JDT welcomed Martin De Sousa (MDeS), Director of Strategy and Partnerships, to the meeting. He advised that there had been a lot of discussion regarding the corporate objectives for 2024/25 as the Trust wanted them to be ambitious but realistic. They were also keen for them to reflect the challenges in the system, whilst recognising the pressure that teams were already under. The report set out the 14 corporate objectives that had been proposed and MDeS advised that they had been structured around the five domains of the UHS 5 Year Strategy. 3 The following comments were made: • KL said that, as a member of staff, she appreciated the fact that the objectives clearly linked to the vision and values of the Trust. • MDeS confirmed that UHS continued to work closely with acute Trusts outside the HIOW ICS, e.g. Salisbury NHS FT and University Hospital Dorset. • MDeS confirmed that the corporate objectives would be included in the Trust Board papers that were available to the public and in the hospital’s annual report. • measures were in place to ensure that progress against the corporate objectives could be monitored. 5.3 Non-NHS Activity JDT welcomed Peter Baker (PB), Commercial & Enterprise Director, to the meeting and he acknowledged that one of the responsibilities of governors was to provide a level of assurance that the Trust was predominantly focussed on NHS activity. He noted that private patients and overseas visitors continued to bring income into the Trust and that in 2023 a new company, UHS International Development Centre (IDC) had been set up to support the funding and development of innovative products. The IDC would enable staff to bring forward innovations for consideration and to present them to a professional team, who could then take them forward and look for investors. Many staff had innovative ideas and the IDC provided an exciting opportunity for them. PB advised that the IDC worked closely with the University of Southampton and also that it generated income from contracts with independent hospitals (Spire and Nuffield), the Ministry of Defence and the cruise line industry. The following comments were made: • staff were already under a lot of pressure, caring for NHS patients, so how did the Trust ensure that any additional work was monitored in terms of hours worked, well being and guarding against burnout. PB advised that if a consultant wanted to do private work in NHS time, they had to obtain sign off at a senior level. Generally, however, they would undertake any additional work at weekends or in the evenings. • the IDC was seen as a good recruitment and retention tool and the Trust had a generous intellectual property policy. • EW advised that Solent University would be keen to support the IDC with knowledge exchange and PB agreed to pursue the opportunity. Action: EW and PB to discuss the potential for knowledge exchange between the IDC and Solent University. 5.4 Annual Report and Quality Accounts Timetable 2023/24 CM presented the paper and highlighted the timetable provided. He advised that the Quality Account had to be published by 30 June 2024 and that the Annual Report and Accounts 2023/24, could not be published until after they had been laid before Parliament. It was noted that Parliament’s summer recess would commence on 23 July 2024. The first draft of the annual report and accounts was about to be circulated to the governors for a one-month consultation period and final sign off was scheduled for 17 June 2024, with submission by 28 June 2024. 4 6 Governance 6.1 Review Terms of Reference - Council of Governors and Working Groups CM advised that there had been no significant changes to the Terms of Reference for the Council of Governors and its working groups. A couple of minor changes had been proposed to reflect the current composition of the CoG and compliance arrangements, together with a small number of grammatical changes. Decision: The CoG approved the revised Terms of Reference for the Council of Governors and its working groups. 6.2 Vacancy for the Health Professional and Health Scientist Staff Governor KR advised that KL would be standing down as a governor on 28 June 2024 as she would be leaving UHS. Generally, there would be three options for filling a vacancy for any reason other than the expiry of the term of office but Option 2 did not apply, as there had only been one candidate at the last election. The CoG was therefore asked to approve Option 1, by calling an election to coincide with the scheduled governor elections in 2024. Decision: The CoG approved the use of Option 1 to fill the vacant seat for the health professional and health scientist staff group, by calling an election to coincide with the scheduled governor elections in 2024. 6.3 Council of Governors’ Elections 2024 KR advised that two vacancies would arise within the Rest of England and Wales public constituency of the CoG on 1 October 2024, when the current governors reached the end of their term of office. The proposed timetable and arrangements for the elections to the CoG in 2024, were noted. 7 Membership Engagement and Governor Activity 7.1 Membership Engagement SD introduced the membership engagement report and advised that the Communication Team was in a transition phase, which meant that it was having to look at what events it could coordinate and support. Consequently, he had not yet circulated a list of events to governors, for them to indicate their availability. He highlighted the following: • with reduced staff available, the Trust’s attendance at larger community events, would be the priority (e.g. the Mela Festival). Working in partnership with other teams was also being considered. • there was a particular focus on existing members, to ensure they were kept up-to-date with news/events and a monthly email was sent out. The digital magazine, Connect, was sent out quarterly. • there had been lots of questions from members at the virtual event held in February on dementia. A second virtual event in the series ‘Transforming lives and healthcare through research’, was being arranged. • there would be a virtual event w/c 6 May 2024 on choosing the right healthcare for your child. The head of the 111 service from South Central Ambulance and David Jones, Consultant Paediatrician at UHS, were both due to speak. The following comments were made: • it was unfortunate that the number of events to be attended, was having to be reduced. 5 • whether the ‘open’ rate for emails sent to members, suggested that it was not their preferred means of receiving updates. SD advised that it was typical of the ‘open’ rate experienced by other organisations. • it was suggested that key points should be included in the body of any email sent out, rather than as an attachment, which members may not open. • that any material sent out needed to be as engaging as possible. Action: SD agreed to provide a list of events (for KR to circulate) so that governors could indicate their availability. 7.2 Membership Strategy - Review of the Trust’s Public Membership SD advised that many of the Trust’s public members had been recruited when the Foundation Trust was formed in 2011 but that a large proportion of the database was now out of date, due to members moving or being deceased. A data cleansing programme was used but was only around 80% accurate. Public members with an email address were contacted regularly. However, those for whom the Trust only held a postal address, were only contacted when there was an election to the CoG in their constituency. The Trust was therefore keen that members for whom it did not hold an email address, were asked to opt in, if they wished to continue as a Trust member. The following comments were made: • it was suggested that members might be encouraged to opt in, if the Trust made them aware of the overall cost of communicating by post and how, for example, that might equate to employing an additional nurse. • the Trust should be careful not to make members feel guilty, as they may decide to opt out and then receive nothing. SD assured the CoG that UHS would use the experience of the database company to ensure that any wording used was appropriate. Decision: The CoG approved Option 1, which had also been the preferred option of the governors who had attended the Membership and Engagement Working Group on 11 January 2024. 7.3 Governors’ Nomination Committee Feedback JDT advised that the NED appraisals had been conducted and the relevant documents were complete. She had provided a report to the Governors’ Nomination Committee and had attended their recent meeting. 7.4 Feedback from Strategy and Finance Working Group MF advised that the Strategy and Finance Working Group had met on the 29 April 2024. There had been a discussion about health inequalities and Paul Grundy, Chief Medical Officer and Luci Hood, Head of Medical Directorate had been invited to talk about what actions the Trust was taking. MF said that it had been well attended, there had been good presentations and lots of questions raised. 7.5 Feedback from Patient and Staff Experience Working Group SG advised that Serena Gaukroger-Woods, Head of Clinical Quality Assurance, had attended the working group. She had discussed the draft Quality Account priorities for 2024/25 and had given an overview of how the process worked. Those attending had been able to ask questions and had inputted into the draft plan. 6 SG mentioned that governors had been surprised to learn that a behaviour framework, initiated by staff, was being produced and that post Covid-19 there had been a need to go back to some of the more traditional values. 7.6 Feedback from Membership and Engagement Working Group KL advised that Arabella Roderick, the Trust’s Gypsy, Roma and Traveller (GRT) Liaison Lead, had attended the working group. She had been in post for 18 months and had been working with the GRT community to build better links and to try to make UHS a more welcoming environment for them to seek help and treatment. KL said that it had been a very engaging conversation, that it was a community who experienced significant health inequalities and that there was a lot more work to be done. 8 Review of Meeting JDT asked governors for their feedback regarding the meeting and the following comments were made: • that the informal session with the NEDs had been valuable and their detailed answers had been appreciated. • that more time with the NEDs would have been useful. • that a more “punchy”, top line account of the finances, with visual aids and without acronyms, would have been welcomed. 9 Any Other Business JDT noted that it was KL’s last meeting and she thanked her for stepping into the Lead Governor role, when she had still been a relatively new governor. She thanked her for all her work and wished her well for the future. KL responded by saying that she had enjoyed the role and she thanked the governors for being relatable and approachable. 10 Date of Next Meeting The next meeting of the CoG would be held on 24 July 2024. 7 18 July 2024 Agenda item Assigned to Deadline Status Council of Governors 31/01/2024 7.1 Membership Engagement 1114 . Membership Events 2024/25 Sam Dolton 01/05/2024 Completed Explanation It was agreed that SD would circulate a list of all events (once available) to governors, so that they could indicate their availability. Update SD provided a further update at the meeting on 1 May 2024 regarding the reduced number of community events which the Trust would be attend in 2024. Following his update, a new action item was created regarding this (see action item 1131). Council of Governors 31/01/2024 7.3 Feedback from Strategy and Finance Working Group 1115 . Trust's Inequalities Strategy Mandy Fader and Karen Russell 01/05/2024 Completed Explanation It was suggested that MF/KR obtain more information from Paul Grundy (Chief Medical Officer) about the new health inequalities group at UHS. Update Paul Grundy and Luci Hood (Head of Medical Directorate) attended the Strategy and Finance Working Group meeting on Monday, 29 April 2024 to provide a presentation regarding the Trust's Health Inequalities Strategy. Council of Governors 31/01/2024 7.4 Feedback from Patient and Staff Experience Working Group 1116 . Security at the Princess Anne Hospital Sandra Gidley and Karen Russell 24/07/2024 Completed Explanation It was agreed that SG would seek clarification regarding the specific issues picked up in the CQC report around security and the actions that had been taken and that governors consider joining a matrons’ walkabout at the PAH, so they could see the current security system that was in place. 18 July 2024 12:48 Update An update was provided by Tim Peachey at the governors' and non-executive directors' discussion meeting on 1 May 2024. A further update on the progress of the new security arrangements will be provided at the governors' and non-executive directors' discussion meeting on 24 July 2024. Arrangements for governor walkabouts within the hospital are currently being reviewed on a broader basis. Council of Governors 01/05/2024 5.1 Chief Executive Officer's Performance Report 1128 Thank you to UHS staff . Joe Teape 24/07/2024 Completed Explanation The governors were keen to express their thanks to the staff for the sterling work they did and JT was asked to consider how that message could be shared across the organisation. Update An infographic has been shared across staff briefing and social channels. David French (Chief Executive Officer) has also arranged to prepare a video which will include this message. 1129 . Band 2 staff Jenni Douglas-Todd 24/07/2024 Completed Explanation JDT agreed to ask Steve Harris, Chief People Officer, to provide governors with an update regarding the situation with Band 2 staff. Update Steve Harris has provided the following update: UNISON (an NHS trade union) is leading a national campaign for healthcare assistants (HCAs) in Trusts. This is in relation to levels of pay for these roles, which are typically paid at band 2. UNISON's campaign pushes for a recognition that many HCAs have actually undertaken band 3 duties over a number of years. The claim pushes for an entitlement to a rectification of their banding and appropriate back pay to reflect this. A small number of Trusts have seen industrial action and have reached a settlement. UNISON has been conducting campaigning activity at UHS over the last few months. UHS is currently evaluating the potential impact of a claim being lodged here and simultaneously pushing for a national solution to the issue, as it is likely to affect nearly all NHS organisations. Page 2 18 July 2024 12:48 Council of Governors 01/05/2024 5.3 Non-NHS Activity 1130 Knowledge exchange between the IDC and Solent . University Emma Wadsworth and Pete Baker 24/07/2024 Completed Explanation EW and PB to discuss the potential for knowledge exchange between the IDC and Solent University. Update EW has advised that her colleagues Katarzyna Gleadell (Head of Knowledge Exchange) and Mike Toy (Senior Communities Development Manager) met with PB and Martin Gossling (Head of Commercial Innovation) on 12 June 2024. They discussed the UHS Innovation Centre and any collaborative support Solent University might be able to offer. Following the meeting, Katarzyna and Mike shared Solent’s Business Solution information and details of their current Innovation Voucher scheme. They also extended an invitation to Martin and Peter to visit the University for a tour of their facilities and discussion with some of their Research Leads. It is hoped to arrange this visit over the summer. Council of Governors 01/05/2024 7.1 Membership Engagement 1131 . UHS attendance at community events in 2024 Sam Dolton and Karen Russell 24/07/2024 Completed Explanation SD agreed to provide details of any events which the Trust is planning attend, for KR to circulate), so that governors could indicate their availability. Update SD confirmed that the Trust's research communications team would be attending the Southampton Mela Festival on Saturday, 13 July 2024 and governors were invited to support the event. Details of the event were circulated to governors on 26 June 2024. Governors were also invited to support a dual stand between Diabetes UK and the Digital team at HIOW ICB at Eastleigh Mela on Sunday, 21 July. Details of the event were circulated to governors on 9 July 2024. The Trust will be attending Southampton Pride during the weekend of 24/25 August 2024 and governors are invited to support this event. Details were circulated to governors on 18 July 2024. There is currently no other planned attendance at community events in 2024 but governors will be advised if this changes. Page 3 Report to the Council of Governors Title: Agenda item: Sponsor: Author: Date: Purpose Chief Executive Officer’s Performance Report 5.1 David French, Chief Executive Officer Sam Dale, Associate Director of Data and Analytics 24 July 2024 Assurance Approval or reassurance Ratification Information Y Issue to be addressed: Information about Trust performance supports the Council of Governors in their role. Response to the issue: This report is intended to inform the Council of Governors about aspects of the Trust’s performance. Implications: This report provides performance information relating to a broad range of Trust services and activities. There are no specific implications. Risks: This report is provided for the purpose of information. Summary: This report is provided for the purpose of information. UHS Council of Governors July 2024 Chief Executive’s Performance Report 1. Purpose and Context The purpose of this report is to summarise the Trust’s performance against a range of key indicators. Where available, this report covers data from the period April 2024 to June 2024, noting that some performance data in relation to some of the targets is reported further in arrears. Notable features of the last quarter include: • The trust set a £14.5m deficit plan for 2024/25 which includes incremental monthly improvements and a break even position for the second half of the year. The plan includes an £85m savings target underpinned by internal productivity and efficiency schemes alongside system wide transformation. • The trust reported an £8.4m deficit after two months, which is £2m behind the financial plan. However significant progress has been through new recruitment controls and the trust continues to increase clinical revenue as elective activity levels reached 123% of 19/20 levels. • Patient flow challenges remain as the volume of patients attending the emergency department grew by 2% in quarter two and the volume of patients in the hospital not meeting the criteria to reside (nCTR) remains above 200 each day. • Despite the operational challenges, the hospital is benchmarking well on performance targets for elective waiting lists, emergency waiting times and cancer pathways despite a recent increase in referrals. UHS is consistently in the top quarter for most key metrics when compared to peer teaching hospitals across the UK. • The organisation continued to prioritise clinically urgent and long waiting patients during the latest period of industrial action. The hospital is in a positive position as we target the national ambition of zero patients waiting over 65 weeks by the end of September 2024. 2. Safety Infection Control Clostridium Difficile infection MRSA Bacterium infection Target 78.0% EDs (Types 1 & 2) (Mar’25) Apr 2024 May 2024 Jun 2024 69.1% 71.3% 69.7% Attendances to the Emergency Department (ED) have continued to increase, averaging 435 per day across April, May and June in 2024. This represents a 2% increase on volumes reported in the previous quarter and a 5% increase against the equivalent period last year. Whilst this generates flow challenges for the organisation, UHS has maintained a four hour performance position close to 70% for all months in quarter one. The hospital’s ED performance continues to compare strongly, ranking 2nd for May 2024 and 4th for June 2024 when compared to 20 peer teaching hospitals across the UK (for Type 1 attendances). Referral to Treatment (RTT) % incomplete pathways within 18 weeks in month Total patients on a waiting list Target => 92% Apr 2024 62.74% 59,485 Page 3 of 5 May 2024 63.89% 59,812 Jun 2024 TBC TBC The trust has seen a 2% increase in the number of patients on the RTT waiting list since the final quarter of the 2023/24 financial year. This increase is within the referral element of patient pathways, whereas the volume of patients waiting for a planned admission or diagnostics have both reduced. A significant proportion of the referral growth sits within specialties impacted by seasonal conditions. Overall, the hospital continues to benchmark well for the proportion of patients who have been waiting over 18 weeks for treatment, with UHS ranking in fourth place for each of the last six months when compared to 20 peer teaching hospitals. The organisation continues to report zero patients waiting over two years and the only cohort of patients now waiting over 78 weeks (14 in May 2024) remains those impacted by the national shortage of corneal tissue which is managed nationally. In May 2024, the trust reported less than 50 patients waiting over 65 weeks and is fully focussed on the national ambition to achieve zero by September 2024. Outside of the corneal patients, the remaining 65 week waiters are complex cases in a small number of specialties. The organisation continues to rank in the top quartile for this metric when compared to peer teaching hospitals. Cancer Faster Diagnosis - within 28 days 31 Day target - decision to treat to first definitive treatment 62 day target - urgent referral to first definitive treatment Target > =77% => 96% => 70% Mar 2024 87.2% 92.3% 77.3% Apr 2024 85.7% 90.8% 76.5% May 2024 85.9% 88.7% 69.7% Over the last six months, the organisation implemented multiple steps to streamline patient pathways, increase capacity and balance staffing levels with the demand for cancer services. These action plans have proved successful as our waiting times and breach cohorts improved. The trust benchmark wells for both 28 day and 62 days metrics, consistently ranking first for 28 day faster diagnosis against peer teaching hospitals. Alongside a difficult financial and recruitment position, the organisation has faced challenges to maintain these levels of performance in the last two months as urgent referrals continue to increase in 2024. The organisation continued to prioritise cancer patients and their treatments through all periods of industrial action and the organisation is in constant dialogue with primary care to explore innovative pathways and share referral outcomes. 5. Finance The financial environment remains extremely challenging as the organisation commences a new financial year. The annual plan for 2024/25 is a £14.5m deficit with incremental improvement needed to take the organisation from a deficit in the first half of the year to breakeven in the second half of the year. The plan is predicated on the delivery of an £85m savings programme that not only needs a step change improvement in productivity and efficiency but system wide transformation particularly across schemes helping accelerate discharge and reducing the numbers of patients within the hospital who don’t meet the criteria to reside or who have mental health rather than physical health needs. Further to this the plan assumes no industrial action which carries an immediate risk for June. UHS is currently reporting an £8.4m deficit after two months (April and May) which is £2m behind plan. This is predominantly due to savings targets not being achieved fully in early months coupled with an estimated gap in consultant pay award funding of £0.2m per month. Mobilising the delivery of efficiency plans to keep pace with required efficiency savings was a known risk through the planning process and progress continues to be made in making sustainable financial improvements. Page 4 of 5 The organisation has made great strides in making sure workforce growth is controlled and agency costs minimised. Agency expenditure is below 1% of total pay expenditure and continues to benchmark favourably when compared to similar organisations. Surge capacity has also reduced in usage across April and May with the organisation delivering activity predominantly from within its funded bed base. The trust has also delivered elective activity at 123% of 2019/20 levels which is 10% above the trusts target. This has helped deliver additional revenues of £3m across April and May. Non criteria to reside numbers however remain flat from 2023/24 at between 200 and 250 in any day. Similarly mental health patient volumes also remain broadly similar to 2023/24. Both these two factors pose significant risk to the delivery of the financial plan. Risks will continue to be monitored closely in year as continuing to run in a deficit is not sustainable for the trust’s cash or capital position. The trust however remains positive that in working with system partners, improvements can be achieved and therefore continues to forecast plan delivery. Further to this the trust remains on target to spend its full capital allocation for 2024/25 totalling £86m. This includes £5.5m (£3.5m subject to business case approval) recently awarded for the emergency department, £18m related to continued investment in decarbonisation funded via a Salix grant, and £7m related to the completion of the Southampton Community Diagnostics Centre planned for the Royal South Hants hospital (centrally funded). This investment in capacity, digital and estates infrastructure helps support continued ongoing financial sustainability and efficiency improvements that provide foundations for the future. 6. Human Resources Indicator Q4 23/24 Staff recommend UHS as a place to work % 63.0% Staff survey engagement score (out of 10) 6.8 Q1 24/25 63.8% 6.85 The most recent quarterly survey results show a slight increase in the percentage of staff who would recommend UHS as a place of work and the overall engagement score, which we hope will continue. It is acknowledged that the response rate for quarterly submissions is significantly below the rate achieved for the annual staff survey. Indicator Staff Turnover (internal target; rolling 12 month) Sickness absence 12 month rolling (internal target) Target <=13.6% <=3.9% Apr 2024 11.0 3.8 May 2024 11.4 3.8 Jun 2024 11.2 3.9 Turnover: In June 2024, UHS had a total of 107.1 WTE leavers. The highest number of leavers was within Trust HQ, with 25.6 WTE leavers. Within Trust HQ, the Admin & Clerical staff group had the most significant turnover, accounting for 13.9 WTE leavers. Division B had the second highest turnover, with 23.9 WTE leavers, which is 1.6 WTE fewer than Trust HQ. In Division B, the largest contributions to turnover came from the Nursing and Midwifery staff group, with 8.7 WTE leavers, and the Additional Clinical Services staff group, with 8.0 WTE leavers. Sickness: The current rolling sickness rate (as of June 2024) is 3.9%, which is the same as the sickness target for 24/25 (<3.9%). In-month sickness for June 2024 was 3.6%. The rolling sickness rate for June 2024 is 0.1% higher than July 2023 figure (3.8%). Page 5 of 5 Report to the Council of Governors Title: Agenda item: Sponsor: Author: Date: Purpose Operating Plan 2024/25 5.2 Ian Howard, Chief Financial Officer Ian Howard, Chief Financial Officer 24 July 2024 Assurance or Approval reassurance Ratification Information Y Issue to be addressed: Information about trust planning and budget setting supports the Council of Governors in their role. This report is intended to inform the Council of Governors about aspects of the Trust’s operating environment and plan for 2024/25. A more detailed report is presented to Trust Board for their consideration and approval. Response to the issue: UHS is entering the financial year with a deficit run rate of between £4m - £4.5m per month (£48m-£54m per year). The financial settlement for 2024/25 remains challenging, with reductions to funding in relation to national convergence to a “fair share” of funding and return of deficit from the prior year, and no growth funding has been offered. We have been in discussions with HIOW ICB and NHSE, noting this position is not affordable nationally, nor do we at UHS have the cash to support this scale of deficit. We have therefore been focussing on stretch improvements we can make within UHS and across the system, as well as identifying some additional funding, in order to deliver an improved financial deficit plan position. UHS has now submitted a revised 2024/25 operational plan that delivers an improved financial deficit of £14.5m, whilst maintaining our commitment to both quality and performance targets. As part of the improved plan we are also anticipating a further £11m of cash support from NHSE. The assumptions within the plan are outlined in Appendix A. This relies upon delivery of a number of system-wide initiatives, including reductions to Non-Criteria to Reside (NCTR) patients, reduced mental health demand and an unidentified system stretch focussed on potential corporate savings through collaboration with partners. The plan also relies upon stretched internal targets relating to our programmes of transformation, including outpatients, theatres and patient flow. This is on top of previous targets, benefits from business cases and “BAU” CIP in divisions. The overall plan is therefore significantly ambitious and stretching, with elements within our control and some elements where we need to work with partners. There is of course significant risk within these plans. However, we have also focussed on areas where we know there are opportunities, and we can improve. Our collective effort needs to focus on delivering the best position we can in these areas, which will support our position across performance, quality and financial metrics. Implications: (Clinical, Organisational, Governance, Legal?) This report provides information relating to a broad range of trust services and activities, there are no specific implications. Risks: (Top 3) of This report is provided for the purpose of information carrying out the change / or not: Summary: Conclusion This report is provided for the purpose of information. and/or recommendation 2024-25 Annual Plan Summary Report to Council of Governors 24 July 2024 UHS Executive Summary This presentation: • Sets out the plans we have submitted to HIOW ICB and NHS England, and that we will be expected to deliver. • Highlights important opportunities and areas that we can focus on within our plan. • Acknowledges the significant level of challenge that we will need to manage, aligned the scale and pace of improvement we seek. In summary, our plan shows: • We are performing well on quality/performance metrics, with specific areas of focus to improve further. • Finances – UHS is planning to deliver a £14.5m deficit in 2024-25. This financial position comes with significant risks. It is expected to be reached through NCTR & Mental Health reductions, confirmed additional funding, increased transformation programme targets, and further CIP stretch. • We require ICS support to reduce NCTR and MH patients by a total of 170 per day. Production of realistic ICB delivery plans is ongoing. • Workforce – our WTE has grown by 18% since April 2020, in line with ERF performance. Our plan includes targeted reductions, alongside planned increases, with a net total reduction of 333 WTE by March 2025 assuming demand initiatives are successful. 2 Finance (Underlying Position 23/24) Key drivers of the underlying position: Underlying pressures have built up over several years. 3 Financial Planning Bridge (24/25) Note: A further £2.9m stretch was applied to System-related CIP, taking the revised deficit plan to £14.5m. 4 ERF Performance In 2024-25 we plan to increase our ERF income to 136% of 2019-20 levels. We expect to deliver 127% through existing levels of activity, approved business cases, and based on the assumption of no Industrial Action in year. A further 9% requires delivery via transformational programmes increasing productivity. 5 Transformation Programme Our plan includes further improvements within our existing Transformation programme. Programme Patient Flow Stretch Value £2.4m Optimising Operating Services £3.3m Outpatients £2.5m Rationale Difference between a 5% length of stay reduction and the existing plan to achieve a 3% improvement compared to 2023/24 Additional 5% ERF income at a 50% margin, related to elective admissions, as a result of additional cases per list / improved capped theatre utilisation %, phased achievement Most likely to be achieved through conversion of PIFU / OPFU demand reduction into additional OPFA or Advice & Guidance Note: The above Transformation programmes are enablers for divisional CIP delivery. 6 Transformation Programme: Patient Flow The patient flow programme is targeting a 5% reduction in length of stay in 24/25 having delivered a 1.6% reduction in 23/24. The initial ambition of a 3% reduction would yield £5m of benefit to UHS. The financial stretch to get to 5% represents an additional £2.4m, this totals £7.4m. Flow Programme - Average LoS against Baseline and LoS Reduction Target 7.50 7.00 6.50 6.00 5.50 5.00 4.50 4.00 02/04/2023 02/05/2023 02/06/2023 02/07/2023 02/08/2023 02/09/2023 02/10/2023 02/11/2023 02/12/2023 02/01/2024 02/02/2024 02/03/2024 02/04/2024 02/05/2024 LoS Average LoS rolling 13 Weeks Baseline LoS Reduction Target 7 Transformation Programme: Outpatients Planning guidance created a new metric looking at the volume of first appointments and procedures as a proportion of overall outpatient appointments, replacing the previous target on outpatient follow-up reduction. Alongside improvements in DNA’s and A&G diversions, UHS will need to hit 55% on this metric to deliver our original programme plus the £2.5m of financial stretch. UHS increased by 5% against this metric in 23/24 from 46% to 51% requiring a further 4% this year. Outpatient Programme - % of New and OPPROC Attendances against Follow ups 56.0% 54.0% 55% 52.0% 50.0% 48.0% 45.9% 46.0% 45.3% 46.0% 46.7% 46.5% 47.4% 48.9% 47.9% 49.0% 48.7% 50.2% 49.9% 50.8% 44.0% 42.0% 40.0% 01/04/2023 01/05/2023 01/06/2023 01/07/2023 01/08/2023 01/09/2023 01/10/2023 01/11/2023 01/12/2023 01/01/2024 01/02/2024 01/03/2024 01/04/2024 % New and OPPROC Target 8 Transformation Programme: Theatres UHS increased its average theatre utilisation performance by 2% in 23/24 to 82.4% ending the year around 85% capped utilisation. Consistent performance above 85% utilisation enabling a further 2,310 cases (at £3,615 average tariff) to be completed is required to deliver £3.3m of financial stretch in addition to the original programme plan. The accuracy of internal theatre utilisation data and correlation to model hospital is currently under review so the chart below is subject to change. Theatre Programme - % Capped Utilisation 90.0% 85.0% 80.0% 75.0% 70.0% 65.0% 60.0% 02/04/21062/034/23002/034/21042/035/22082/035/21012/036/22052/036/20092/037/22032/037/20062/038/22002/038/20032/039/21072/039/20012/130/21052/130/22092/130/21022/131/22062/131/21002/132/22042/132/20072/031/22012/041/20042/042/21082/042/20032/043/21072/043/23012/043/21042/044/22082/044/21022/045/2024 Capped Utilisation % Capped Utilisation Target 9 NCTR Patients A reduction in the number of acute hospital beds inappropriately occupied by NCTR patients is fundamental to the UHS plan. UHS is reliant on system plans to support delivery of reductions in NCTR. UHS Average Daily nCTR Patients (by month) 300 250 200 150 100 50 0 Jan-23 Feb-23 Mar-23 Apr-23May-23 Jun-23 Jul-23 Aug-23 Sep-23 Oct-23 Nov-23 Dec-23 Jan-24 Feb-24 Mar-24 Apr-24May-24 Jun-24 Jul-24 Aug-24 Sep-24 Oct-24 Nov-24 Dec-24 Jan-25 Feb-25 Mar-25 Average Daily nCTR 24/25 Trajectory 10 Mental Health Patients Our plan is predicated on a reduction in the number of mental health patients inappropriately accommodated within UHS’s acute hospital beds. UHS is reliant on system plans to support delivery. 11 Workforce Plan The graph and table summarises the WTE plan and movements in year for 2024/25. This includes system related CIPs of 338 wte that take effect from Q2. Adjusting for these the plan is forecast to be relatively flat over the year with divisions allocated AWL targets. 12 Quality and Performance Targets Area National Target UHS Performance Improvement trajectory in 24/25 year from 70% achievement in March 24 target to achieve 78% in Urgent care and emergency Improve A&E waiting times, minimum of 78% of patients 4 hours in March 2025 with a seen within March 2025. Viewed as a system-wide target and is contingent upon: - inclusion of UEC/UTC activity as per 23/24 approach, and - delivery of ICS-wide transformation including reduction of NCTR patients to improve inpatient flow. Eliminate waits of over 65 weeks for UHS is expecting to meet this target, with zero RTT 65 week waits by September 24. Elective waits elective care by September 2024 (except UHS has profiled zero RTT 52 week waits by March 25. Performance is dependent upon referral where patients choose to wait longer or growth rates and no Industrial Action in specific specialties) Increase the percentage of patients that UHS expects to achieve the national trajectory for diagnostic 6 week waits at trust level overall. Diagnostics receive a diagnostic test within six weeks UHS will struggle to meet the target for both NOUS and CT as individual modalities, where long in line with the March 2025 ambition of term recruitment challenges are impacting activity/capacity, but it aims to continue making some 95% improvements in these modalities. Increase the proportion of outpatient OPFU (without attendances that are either first UHS is already achieving this target in 23/24 and this is expected to continue in 24/25 with some procedures) attendances or attract a procedure tariff improvements expected linked to the Trust's ongoing outpatient transformation programme to 46% across 2024/25 Implementation of a system-wide transformation programme has been agreed with the ICS and Improve community services waiting reflected into UHS projections. The plan targets a reduction in UHS NCTR patients, to 160 patients NCTR times, with a focus on reducing long in Q2 and further reduced to 100 from Q3 to year end. Achievement of this is dependent upon the waits successful delivery of transformation plans by ICS colleague organisations (including local authorities). Improve performance against the 28 day Cancer 28 day Faster Diagnosis Standard to 77% by UHS forecast to achieve this in 24/25, based on assumptions provided by the Wessex Cancer March 2025 towards the 80% ambition byAlliance March 2026 Improve performance against the UHS forecast to achieve this during 24/25, based on assumptions provided by the Wessex Cancer Cancer 62 day headline 62-day standard to 70% by Alliance. March 2025 It should be noted that the
Url
/Media/UHS-website-2019/Docs/About-the-Trust/Governors/Papers-CoG-24.07.2024.pdf
AAA screening leaflet - Public Health England
Description
Chest Heart Aorta with an aneurysm Abdomen Abdominal aortic aneurysm (AAA) screening A free NHS check for men aged 65 and over Public Health England (PHE) created this leaflet on behalf of the NHS ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Overview This leaflet provides information on abdominal aortic aneurysm screening (also called AAA screening) for men aged 65 and over. It explains what an abdominal aortic aneurysm (AAA) is and what happens when you go for screening. It should help you decide if you want to be screened. The AAA screening check is a simple free ultrasound scan. Who we screen The NHS invites all men for screening in the year they turn 65. Men over 65 Men aged over 65 who have not been screened before can contact their local service to arrange a test. Abdominal aortic aneurysm The aorta is the main blood vessel that supplies blood to your body. It runs from your heart down through your chest and abdomen. In some people, as they get older, the wall of the aorta in the abdomen can become weak. It can then start to expand and form an abdominal aortic aneurysm. The condition is most common in men aged 65 and over. 2 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Chest Heart Abdominal aorta Abdomen Chest Heart Abdominal aorta Abdomen Chest Heart Aorta with an aneurysm Abdomen 3 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Potential risks of an abdominal aortic aneurysm Large aneurysms are rare but can be very serious. As the wall of the aorta stretches it becomes weaker and can burst, causing internal bleeding. Around 85 out of 100 people die when an aneurysm bursts. An aorta which is only slightly enlarged is not dangerous. However, if the aorta measures between 3.0cm and 5.4cm it is important that we keep checking it to see if it is getting bigger. Benefits of screening If you have an aneurysm you will not usually notice any symptoms. This means you cannot tell if you have one, will not feel any pain and will probably not notice anything different. We offer screening so we can find aneurysms early and monitor or treat them. This greatly reduces the chances of the aneurysm causing serious problems. The easiest way to find out if you have an aneurysm is to have an ultrasound scan of your abdomen. Around 1 in 92 men who are screened have an abdominal aortic aneurysm. 4 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Risk factors Men are 6 times more likely to have an abdominal aortic aneurysm than women, which is why women are not offered screening. The chance of having an aneurysm increases with age. Your chance of having an abdominal aortic aneurysm can also increase if: • you are or have ever been a smoker • you have high blood pressure • your brother, sister or parent has, or has had, an abdominal aortic aneurysm 5 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME AAA screening test We use a simple ultrasound scan, similar to that offered to pregnant women. This is very quick and usually lasts less than 10 minutes. At the clinic we will check your personal details, explain the scan and give you the chance to ask any questions. We will ask you to lie down and lift up or unbutton your shirt. You will not need to undress. We will put a cool gel on your abdomen. We will then slide the scanning sensor over your skin. The scan will show a picture of the aorta on a screen and we will measure it. We will tell you your result straight away and also send a copy to your GP practice. 6 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Your personal information The NHS AAA Screening Programme needs to process your data in order to provide a safe and effective service. By law, everyone working in, or on behalf of, the NHS must respect your privacy and keep all information about you safe. The NHS Constitution sets out how the NHS should handle your records to protect your privacy. In addition, there are laws in place to ensure confidentiality is maintained. The NHS Screening Programmes use personally identifiable information about you to ensure you are invited for screening at the right time. Public Health England also uses your information to ensure you receive high quality care. You can find out more about how your information is used and protected, and your options, at www.gov.uk/phe/screening-data. Find out how to opt out of screening at www.gov.uk/phe/screening-opt-out. Information for transgender and non-binary people about NHS population screening programmes is available at: www.gov.uk/government/publications/nhs-populationscreening-information-for-transgender-people 7 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Possible screening results: No aneurysm found If your aorta is less than 3cm wide, this means you do not have an aneurysm. Most men have this result. No treatment or monitoring is needed afterwards. We will not invite you for AAA screening again. Small aneurysm If your aorta is between 3cm and 4.4cm wide, you have a small aneurysm. We invite men with a small aneurysm back for scans every 12 months to check if it is getting bigger. Medium aneurysm If your aorta is between 4.5cm and 5.4cm wide, you have a medium aneurysm. We invite men with a medium aneurysm back for scans every 3 months to check if it is getting bigger. Large aneurysm If your aorta is 5.5cm wide or bigger, you have a large aneurysm. Only about 1 in 1,000 men who are screened have a large aneurysm. We give men with a large aneurysm an appointment with a specialist team to have more scans and talk about possible treatment, usually an operation. 8 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Monitoring a small or medium aneurysm You will not need treatment at this stage. However, it is important to monitor the size of the aneurysm as you might need treatment if it gets bigger. Most aneurysms get bigger very slowly, so many men with a small or medium aneurysm will never need treatment. We will invite you to come back for scans every year if you have a small aneurysm or every three months if you have a medium aneurysm. We will give you advice on reducing the chance of the aneurysm getting larger. Your GP practice may also want to give you tablets or review your current medication. They may also want to check your blood pressure. Treating a large aneurysm If we find a large aneurysm, we will refer you to a specialist team. They will carry out some more tests and a specialist will discuss possible treatment with you. This is typically an operation, usually arranged within a few weeks if you decide you want it. During the time when a large AAA is untreated, you may need to stop driving and to check health-related insurance, such as travel insurance. Treatment for aneurysms that are found using screening is usually very effective. There are risks from treatment which will be explained in detail by the specialist. Not everyone who has a large aneurysm will have an operation. 9 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME Risks from screening There is no risk from the scan itself. However, around 41 out of every 10,000 men screened will eventually have surgery to repair an aneurysm. On average, 1 of these 41 men will not survive the operation but their aneurysm may never have burst if left untreated. Screening does not completely remove the risk of an aneurysm bursting but it is the best method of protection against this condition. Other conditions Screening is just to see if you have an abdominal aortic aneurysm. It does not look for other conditions. If you are worried about any medical problem you should speak to your GP practice. Accuracy of screening test The scan used to find aneurysms is very reliable. No screening test can be completely effective but it is very rare for a man to develop a large aneurysm if no aneurysm is found by screening. Sometimes the person carrying out the scan will not be able to see the aorta clearly. This is nothing to worry about and they will ask you to have another scan, usually on a different day. 10 ABDOMINAL AORTIC ANEURYSM SCREENING PROGRAMME More information • If you have been invited for screening, the phone number for your local screening service is on your appointment letter • You can find information about the NHS AAA Screening Programme and contact details for your local service at www.nhs.uk/aaa • You can read an online version of this leaflet at www.gov.uk/phe/aaa-screening-leaflet • The Circulation Foundation supports people with diseases of the veins and arteries, known as vascular diseases, including abdominal aortic aneurysms. www.circulationfoundation.org.uk • The British Heart Foundation: www.bhf.org.uk • You can also speak to your GP practice 11 O8 An HTML version of this leaflet is available. You can view and download it in large print, and use a screen reader for an audio version. Visit: www.gov.uk/phe/aaa-screening-leaflet We can provide a braille version. Email: phe.screeninghelpdesk@nhs.net First published Updated Reference Web address January 2015 March 2020 AAA01 PN344843 PHE publications gateway number: GW-1123 © Crown copyright 2020 www.nhs.uk/aaa You may re-use this information (excluding logos) free of charge in any format or medium, under the terms of the Open Government Licence v3.0. To view this licence, visit OGL. Where we have identified any third party copyright information you will need to obtain permission from the copyright holders concerned.
Url
/Media/UHS-website-2019/Docs/Services/Blood-heart-and-circulation/AAA-screening-leaflet-Public-Health-England.pdf
1
to
10
of
40
Previous
1
2
3
4
Next
Site policies
Report a problem with this page
Privacy and cookies
Site map
Translation
Last updated: 14 September 2019
Contact details
University Hospital Southampton NHS Foundation Trust
Tremona Road
Southampton
Hampshire
SO16 6YD
Telephone: 023 8077 7222
Useful links
Home
Getting here
What to do in an emergency
Research
Working here
Education
© 2014 University Hospital Southampton NHS Foundation Trust
Browser does not support script.
Browser does not support script.