~specrules strip_html ~Comment Created By: Study Name: Multi Modal Demo Study Code: multidemo Client: CfMCDemo Programmed by: Server name: Date: 2013-11-08 03:06:01 Software Version: 8.5 '' ========== BASIC DATA DEFINES ''>Ifdefine" compile switches (use '' to comment out) ============================ >DEFINE @STUDY multidemo '' Study name >DEFINE @CASELENGTH 32000 '' Data Case Length >DEFINE @VERSION 1.0 '' Study version >DEFINE @QDATE 110813 '' Q'naire Date >DEFINE @WAVE 1 '' Study Wave >DEFINE @SAVETERM '' Save Terminate Data Toggle ''>DEFINE @TEST >DEFINE @DIALER ''Using a dialer, if not set, dialer quotas ignored >DEFINE @CALLNOTES ''If you use call notes you need "HistoryNoteLen=64" in the .fon file '' ========== STUDY HEADER >PURGESAME >LOCFORMAT 1 >FILLDEFINESINQUOTES ''~SPEC_RULES CLN_CHK ~PREPARE COMPILE SPECS MENTOR [@STUDY,& @CASELENGTH,& SPECWID=1500, & TRIPLEQUOTAS, & allowunsetquotas,& CASEID=1.6, & TEXTSTART=20001, & WORKSTART=15001, & FONETEXTLENGTH=4900, & ''LANGUAGE=(CHAR_SET=EXTENDED_ASCII SET=(EN) DEFAULT_LANGUAGE=** SPEAKING=EN),& '' Multilanguage header keyword ''QFFNAME=QFFNAME, & '' Multi-QFF study keyword ] ''{!STRIP_HTML } '' Strip HTML from QFF/DB/DEF (for data processing only!) ''Web controls ''============ {!display_mode=websurvent } ''Make sure specs conform to web standards {!html_dataquestions_only} ''Only apply !html statements to data asking qs {!html_checkboxes=200} ''If <= 200 codes use checkboxes not dropdown {!html_radiobuttons=200} ''If <= 200 codes use radiobuttons not dropdown '' ========== AESTHETIC DEFINES >DEFINE @LINE \+

\* '' Left justified line for spacing questions >DEFINE @SPACE5 \+     \* '' 5 HTML spaces for indenting >Define @LINEBREAK \+

\* '' ========== EXTERNAL TMPL CONTROLS ''{!HTML_DEFINE URL http://demos.cfmc.com//cfmcdemo/multidemo3/index.php } '' Pipe URL for suspend.tmpl info {!HTML_DEFINE TITLE Multi Modal Demo 3 } {!-HTML_DEFINE SECHEAD Section Header } '' ========== COLOR LIST {!COLOR_LIST maincolor altcolor } '' Defines COLOR and ALTCOLOR classes, can also use hex colors ''!Html globals and blocks ''======================== '' Sets default grid error formatting '' Griderror CSS class: '' .error - formats the grid error and error message for all qtypes {!html_griderror_prefix=
} {!html_griderror_suffix=
} '' Default look - formats all basic FLD, VAR, NUM and TEX questions that '' do not require table formatting. '' Default CSS classes are as follows: '' .error - formats the grid error and error message for all qtypes '' .qtext - formats the question text for all qtypes '' .qlabel - formats response text in FLD questions '' .qcomment - formats comment lines (=) in FLD questions '' .qnum - formats span enclosing text input in NUM questions '' .qnumexp - formats exception text in NUM questions '' .qvar - formats span enclosing text input in VAR questions '' .qtex - formats span enclosing text input in TEX questions {Default: !start_cd_block } {!html_error_prefix=} {!html_error_suffix=

} {!html_text_prefix=
} {!html_text_suffix=

} {!html_rc_prefix=} {!html_rc_suffix=} {!html_rx_prefix=} {!html_rx_suffix=} {!html_rl_prefix=} {!html_rl_suffix=
} {!html_rlc_prefix=} {!html_rlc_suffix=
} {!html_rt_prefix=} {!html_rt_suffix=
} {!html_num_input_prefix=} {!html_num_input_suffix=
} {!html_num_exception_prefix=} {!html_num_exception_suffix=} {!html_var_input_prefix=} {!html_var_input_suffix=
} {!html_textquestion_input_prefix=} {!html_textquestion_input_suffix=
} {!html_field_n_input_prefix=} {!html_field_n_input_suffix=} {!end_cd_block } '' Rating and Attribute List. Uses table-based structure to '' display items on left side and radio buttons in separate cells. '' Headers and footers must be created in grids. '' NOTE: ERROR_PREFIX colspan must match table columns. '' Rating CSS classes are as follows: '' .error - formats the error row below the FLD row '' .item - formats the left cell that holds the item / attribute {Rating: !start_cd_block } {!html_error_prefix= } {!html_error_suffix=} {!html_question_text_prefix=} {!html_question_text_suffix=} {!html_response_code_prefix=} {!html_response_code_suffix=} {!html_response_text_prefix=} {!html_response_text_suffix=} {!html_response_list_item_prefix=} {!html_response_list_item_suffix=} {!html_response_list_comment_prefix=} {!html_response_list_comment_suffix=} {!html_response_table_prefix=} {!html_response_table_suffix=} {!html_num_input_prefix=} {!html_num_input_suffix=} {!html_num_exception_prefix=} {!html_num_exception_suffix=} {!html_var_input_prefix=} {!html_var_input_suffix=} {!html_textquestion_input_prefix=} {!html_textquestion_input_suffix=} {!html_field_n_input_prefix=} {!html_field_n_input_suffix=} {!end_cd_block } '' Constant Sum Formatting. Uses table-based structure to '' display items on left side and numeric inputs in cell on '' right. Header must be created in grid. '' Numtab CSS classes are as follows: '' .error - formats the error row below the FLD row '' .item - formats the left cell that holds the item / attribute {Numtab: !start_cd_block } {!html_error_prefix= } {!html_error_suffix=} {!html_question_text_prefix=} {!html_question_text_suffix=} {!html_response_code_prefix=} {!html_response_code_suffix=} {!html_response_text_prefix=} {!html_response_text_suffix=} {!html_response_list_item_prefix=} {!html_response_list_item_suffix=} {!html_response_list_comment_prefix=} {!html_response_list_comment_suffix=} {!html_response_table_prefix=} {!html_response_table_suffix=} {!html_num_input_prefix=} {!html_num_input_suffix=} {!html_num_exception_prefix=} {!html_num_exception_suffix=} {!html_var_input_prefix=} {!html_var_input_suffix=} {!html_textquestion_input_prefix=} {!html_textquestion_input_suffix=} {!html_field_n_input_prefix=} {!html_field_n_input_suffix=} {!end_cd_block } '' Clear block. Erases all previous formatting for manually-designed grids. {Clear: !start_cd_block } {!html_error_prefix=
} {!html_error_suffix=
} {!html_question_text_prefix=} {!html_question_text_suffix=} {!html_response_code_prefix=} {!html_response_code_suffix=} {!html_response_text_prefix=} {!html_response_text_suffix=} {!html_response_list_item_prefix=} {!html_response_list_item_suffix=} {!html_response_list_comment_prefix=} {!html_response_list_comment_suffix=} {!html_response_table_prefix=} {!html_response_table_suffix=} {!html_num_input_prefix=} {!html_num_input_suffix=} {!html_num_exception_prefix=} {!html_num_exception_suffix=} {!html_var_input_prefix=} {!html_var_input_suffix=} {!html_textquestion_input_prefix=} {!html_textquestion_input_suffix=} {!html_field_n_input_prefix=} {!html_field_n_input_suffix=} {!html_num_input_prefix=} {!end_cd_block } '' ========== OVERALL QUOTA TARGETS GO HERE {!TARGET COMPLETES=99999 } {!target callback=0} {!target noanswer=0} {!target busy=0} {!target numberchange=0} {!target leftmessage=0} {!target sendfax=0} {!target voicemail=0} {!target refused=0} {!target disconnect=0} {!target nonbusiness=0} {!target languageprob=0} {!target faxmodem=0} {!target opintercept=0} {!target wrongnumber=0} {!target notatlocation=0} {!target nolongerinbus=0} {!target wantmorecomp=0} {!target waitlist=0} {!target putback=0} {!target remove=0} {!target terminated=0} ''Dialer statuses automatically updated >ifdefine @dialer {!target dialer_connect=0} {!target dialer_no_answer=0} {!target dialer_busy=0} {!target dialer_busy_to_na=0} {!target dialer_trunkline_busy=0} {!target dialer_nuisance=0} {!target dialer_answering_machine=0} {!target dialer_no_ringback=0} {!target dialer_ser_g_status=0} {!target dialer_hung_up_phone=0} {!target dialer_connect_then_abort=0} {!target dialer_number_not_dialed=0} {!target dialer_timedcall_notdialed=0} {!target dialer_unknown_number=0} {!target dialer_out_of_service=0} {!target dialer_incomplete=0} {!target dialer_bad_number=0} {!target dialer_modem_answered=0} {!target dialer_disconnected=0} {!target dialer_forced_resolved=0} {!target dialer_changed_number=0} {!target dialer_number_toooldtocall=0} {!target dialer_allother=0} >endif '' ========== SPECIFIC QUOTA TARGETS GO HERE '' ========== SAMPLE INFO + INITIAL SHELL ''Data variables ''============== {!-DoMentor} {CaseIdent: 1.6 hide Case Id !var,,6,0} {!DoMentor} ''LISA {device: 1924.7 hide ''device values: sphone, deskto !var} {!SPC,L,device,1,7} ''from the USER_DATA hidden input on index page {!HTML_DEFINE DEVICE \|device} {STATCODE: 10.3 HIDE '' Statcodes for Base (Data) !FLD 001 Complete 002 Refused 003 Language Problem 004 Terminate In Screener 005 Non-Working Number 006 Non-Residential Number 007 Non-Business Number 013 Other Terminate at Contact Screen 014 Over Quota Completes 015 Terminate In Screener } {!-DoMentor} {QnaireVersion: 62.4 @Version !spc,9} {chkfone: 67.3 !EXPR,Z,0 } {DateTime1: 70.18 Date/time interview started (yyyymmddhhmmssdjjj) !spc,3,L } {Date1: [datetime1+2.6] hide Date of interview (yymmdd) !var,,6} {Time1: [datetime1+8.4] hide Time of interview (hhmm) !var,,4} {!DoMentor} {NiceDateTime: 89.27 Formatted Date/time of interview (eg. Thu, Jan 20, 2010 10:23pm) !spc,4} {!-DoMentor} {!-Rfton} {Intvwrinfo: 116.120 Interviewer info from employee file !spc,5,1,120 } {!Rfton} {!DoMentor} {Intvwrid: [Intvwrinfo.4] hide Interviewer Id !var,,4,0} {IntvwrName: [Intvwrinfo+5.30] hide Interviewer Name !var,,30,0} {!-DoMentor} {IntvwrSpectypes: [Intvwrinfo+31.9] hide Interviewer special types !field,,9 >rep $A=1,...,9 $A Intvwr is Special type $A >endrepeat } {IntvwrModes: [Intvwrinfo+41.4] hide Interviewer modes !field,,4 B Break, Abort or Change interviews C Change interviews D Debug mode N No capabilities, no view E Echocats mode L Do interviewer logging Q Do debug logging after every question } {IntvwrExtra: [Intvwrinfo+45.75] hide Extra info from employee file !var,,75,0} {!-Rfton} {Studyinfo: 236.162 Study information !spc,7,1,162} {!Rfton} {IvrDeviceNumber: [studyinfo+19.5] hide Device number !var,,5,0} {Ivrtimezone: [studyinfo+44.2] hide Interviewer time zone !var,,2,0} {IvrStationType: [studyinfo+47.2] hide Station type !field 01 Ansi 02 Dialup 03 unknown 04 Vt220 05 Wyse 50 06 Wyse 160 07 Wyse 85 08 Ibm 3151 09 Hp 10 Adm3 11 Adds 12 Hp 700/41 13 Att 705 14 Hp 700/96 15 Hp 700/98 16 Wyse 60 PC Personal Computer WC WebCati WS WebSurvent } {IvrPhoneExtn: [studyinfo+50.4] hide Phone extension !var,,4,0} {StudyName: [studyinfo+111.30] hide Study name !var,,30,0} {LanguagesHave: [studyinfo+142.20] hide Languages available in study !var,,20,0} {WAVE: 398.2 '' Store Wave to Data !EXPR,,@WAVE } {PREPTIME: 400.10 '' Compile time, compare with RPREPTIM if resume issues !SPC,7,56,10 } {CURRLANG:410.2 '' Store Language (if multilanguage study) !SPC,7,110,2} {USERIP: 412.40 !SPC,I,A } {USERAGENT: 452.200 !SPC,I,I } ''Start actual interview ''====================== {!if websurvent() = 1 !PHONE,4 } '' Get Fone Record {!if websurvent() <> 8 !goto Continue } {!-AllowSuspend} {!-AllowTerminate} {!if IntvwrModes(D) Note: this is a DEBUG mode interview. !display } ''Start Sample Info ''================= {!-Rfton} { DialType: 652.1 ''Store the dialer mode for this station. !Expr,,Dialer() } ''0=Manual, 1=Predictive, 2=Power/Preview {!Rfton} {Getphone: 653.25 !if Dialtype <> 1 \+
\* Enter phone number to pull up specific record, or click "Next" for next available. \+

\* \+\*Phone Number\+\*: \_ \+

\* !var,bp,25,10} {!if [Getphone$]<>" " and Dialtype <> 1 !phone,5,61,50,Getphone } ''Get number specified at "Getphone" {!IF Dialtype=1 \+



\* \+

\* DIALER IS CALLING, PLEASE WAIT ... \+

\* !DISP} {getnumb: !phone,1 } ''Get the next phone number from the fonefile {DialStat: 678.3 ''Store phone status in the data !expr,z,fonestatus() } ''is 0 unless you are in predictive mode {Dialprob: !If DialType=1 and DialStat <> 800 ''Got a screen pop in predictive mode but ''call was not a connect (status=800) \+
\*INTERVIEWER: REPORT THE FOLLOWING TO YOUR SUPERVISOR! \+

\*Phone Number \[1.3] - \[4.3] - \[7.4] has a status of \|DialStat| and should NOT have been given to you. \+

\*Click 'Next' to get another number !display } {!if DialType =1 and DialStat <> 800 !Spc,B } ''Example Check Sample Quotas ''=========================== {!comment Put quota checks based on Sample here! Use Phone,Gs to get the information and do the check. If numbers are over-quota you can disgard them and the dialer will NOT dial them if you are in power/preview mode. Lines below are a sample of how you might check quotas QValGet1: 681.2 ''Get the information from position 101-102 !phone,g,101,2 ''of phone File so can Check Quotas QVal1: [QvalGet1] ''Set up a Fld,A question on top of where !field,a ''data was loaded so can both reference data 01 Group A ''on If statements and put text on the screen 02 Group B 03 Group C (Skipto BadQuota) ?? Bad Quota Group ''Check to make sure under quota. If okay, then continue on. !if (QVal1(01) and Quota(GroupA) < Quota(GroupA.T)) or & (QVal1(02) and Quota(GroupB) < Quota(GroupB.T)) or & (QVal1(03) and Quota(GroupC) < Quota(GroupC.T)) !goto DoneChk ''If got here, number is over quota. ''Put screen up for interiewer Quota Group \:Qval1 is now full. Cannot dial the number \[1.3] - \[4.3] - \[7.4] Will try for another. Please wait. !display,3,1 !phone,S,15 ''Set call status for over quota !quota,,overquota,+1,now ''Add to 'overquota' quota !spc,h ''Abort the interview and immediately try for another number Donechk: !goto } ''Sample Variables ''================ {!DoMentor} {PhoneNumber: 683.18 Phone number !phone,g,phonenumber,18} {!-DoMentor} {Areacode: [Phonenumber.3] hide Area Code !var,,3} {Exchange: [Phonenumber+3.3] hide Phone number exchange !var,,3} {Digits: [Phonenumber+6.12] hide Phone number digits !var,,12} {PhSpecType: 701.1 Phone record special type !phone,g,specialtype,1} {PhTimezone: 702.2 Respondent time zone !phone,g,timezone,2} {PhCaseid: 704.10 Phone record caseid !phone,g,caseid,10} {PhCallbackTime: 714.16 Callback time !phone,g,callbacktime_a,16} {PhReplicate: 730.3 Replicate group !phone,g,replicate,3} ''Bug: no international dialing option {!If DialType < 2 ''If you are not in power mode then !goto DialText } ''go to the Status screen {!phone,d,PhoneNumber } ''Dial the number. If PhoneNumber is ''changed, dialer will dial new number { \+
\*The number being dialed is: \+\*(\|Areacode|) \|Exchange| - \|Digits| \+

\* !display } {DialStatPower: [DialStat] ''Reget the Status if you are in Power/Preview Mode !EXPR,Z,FoneStatus() } {!If [DialStat#800] ''If you got a connect, go to status screen !goto B4Status } {!If DialStat <> 800 ''If dialer returned a non-connect status !goto DialCode } ''then go where dialer statuses are handled {DialText: [DialType] ''Change text on the screen for different modes !field,ab 0 to dial 1 on the phone } ''Status Screen {B4Status: !grid } {!if [Phonenumber+10.1$]=" " The number \:DialText: is: \+\*(\|Areacode|) \|Exchange| - \|Digits| \+

\* !display } {!if [Phonenumber+10.1$]<>" " The number \:DialText: is: \+\*\|Phonenumber|\+

\* !display } >ifdefine @Callnotes {!phone,2,3,1,shownote } ''Show last 3 and first call histories on the screen >else {!phone,2,3,1 } ''Show last 3 and first call histories on the screen >endif { \+
\* '' Status Table, Callbacks >rep $CODE=01,...,06;& $STATUS="No Answer","Busy","Callback","Number Change","VM - Left Message","VM - No Message"; \+\* >endrep \+
\* Callbacks \+
\*$CODE \+\*$STATUS \+
\* '' Status Table, Non-Callbacks (2 Column) >rep $LCODE=11,...,16;& '' Left Column Codes $LSTATUS="Refused","Disconnected","Non-Business","Language Problem","Fax/Modem","Operator Intercept";& $RCODE=17,...,22;& '' Right Column Codes $RSTATUS="Wrong Number","Not at Location","Out of Business","Compensation","Waiting List","Remove from List"; \+\* >endrep \+
\* Non-Callbacks \+
\* $LCODE \+\* $LSTATUS \+\* $RCODE \+\* $RSTATUS \+


\* !disp} {Status: 733.2 \+
\+Click "Next" to Continue, or Assign Call Status:\* \-Call Status\* \_ \+


\* !FLD,N 01 No answer ''Status 101 02 Busy ''102 03 Callback ''104 04 Number change 05 VM - Left message ''110 06 VM - No message ''112 11 Refused ''60 12 Disconnected ''61 13 Non-business number ''62 14 Language problem ''63 15 Fax/Modem/Electronic device ''64 16 Operator intercept ''65 17 Wrong number ''66 18 No longer at location ''67 19 No longer in business ''68 20 Wants more compensation ''69 21 Waiting list ''70 22 Remove from list ''20 99 Return number to file ''211 (-mentor)^^ Start interview } {!endgrid } >repeat $A=01,02,03,04,05,06,& 11,12,13,14,& 15,16,17,18,19,& 20,21,22,99;& $B=NoAnswer,Busy,SchedCallBk,NumberChange,VMLeftMessage,VMNoMessage,& Refused,Disconnect,Nonbusiness,LanguageProb,& Faxmodem,OpIntercept,WrongNumber,NotAtLocation,NoLongerInbus,& WantMoreComp,Waitlist,Remove,Putback; {!if Status($A) !goto $B } >endrep {!goto Continue } {DialCode: [DialStat] ''Convert the dialer status to text and !field,ab ''skip the interview to appropriate section (Skipto DialHgUp) 101 Dialer No Answer (Skipto DialHgUp) 851 Dialer No Answer (Skipto DialHgUp) 102 Dialer Busy (Skipto DialHgUp) 852 Dialer Busy (Skipto DialHgUp) 106 Dialer Abandon Call (Skipto DialHgUp) 856 Dialer Abandon Call (Skipto DialHgUp) 107 Dialer Answering Machine (Skipto DialHgUp) 857 Dialer Answering Machine (Skipto DialHgUp) 157 Dialer Trunk Line Busy (Skipto DialHgUp) 854 Dialer Trunk Line Busy (Skipto DialNoRingBack) 183 Dialer No Ring Back (Skipto DialNoRingBack) 863 Dialer No Ring Back (Skipto DialHgUp) 073 Dialer Unknown Number (Skipto DialHgUp) 803 Dialer Unknown Number (Skipto DialHgUp) 075 Dialer Not in Service (Skipto DialHgUp) 805 Dialer Not in Service (Skipto DialHgUp) 076 Dialer Call Not Completed (Skipto DialHgUp) 806 Dialer Call Not Completed (Skipto DialHgUp) 077 Dialer Bad Number (Skipto DialHgUp) 807 Dialer Bad Number (Skipto DialHgUp) 078 Dialer Fax/Modem (Skipto DialHgUp) 808 Dialer Fax/Modem (Skipto NumberChange) 082 Dialer Number Changed (Skipto NumberChange) 812 Dialer Number Changed (Skipto DialHgUp) 071 Dialer Number Not Dialed/Status Unknown (Skipto DialHgUp) 801 Dialer Number Not Dialed/Status Unknown (Skipto DialHgUp) 072 Dialer Timed Number Not Dialed/Status Unknown (Skipto DialHgUp) 802 Dialer Timed Number Not Dialed/Status Unknown (Skipto DialHgUp) 079 Dialer Disconnected Status (Skipto DialHgUp) 809 Dialer Disconnected Status (Skipto DialHgUp) 080 Dialer Forced Resolved (Skipto DialHgUp) 810 Dialer Forced Resolved (Skipto DialHgUp) 095 Dialer Number too old (Skipto DialHgUp) 815 Dialer number too old (Skipto DialHgUp) 858 Dialer SER G status (Skipto DialHgUp) 859 Dialer Hung Up phone (Skipto DialHgUp) 861 Dialer connect then abort (-mentor)??? Other Status ??? No Matching Status } { ''If got here, there is a dialer status ''unaccounted for in DialCode and ''questionnaire should be updated to handle it. Report to the questionnaire programmer that status \|DialStat| needs to be added to the list. Let them know what you heard on the phone for this call. !display } {!goto Hangup } {DialNoRingBack: 735.1 ''If No Ring Back, ask if want to retry number \+
The number that was just dialed did not go through for some reason.\* \-Problem dialing number\* \+
\* Do you want ... !field 1 Immediately Try the number Again (Skip DialHgUp) 2 Try Again Later } {!Phone,S,0 } ''Reset Dialing Status to 0 {!Reset, PhoneNumber } ''Reset to Top of Interview to retry number {DialHgUp: !spc,h } ''Immediately abort and try for the next call. {!sys,c,default} ''Start default html formatting {SchedCallBk: !phone,s,104 } ''Set call status to 104 for specific-time call >ifdefine @CallNotes {Callnote: 736.64 \+
\*INTERVIEWER: Enter any callback notes (max 64 characters)\+

\* !var,,64,0} {!If Callnote$<>" " !phone,z,36,callnote,64} >endif {!quota,,Callback,+1,now } ''Add 1 to the Callbacks counter {!goto Hangup} ''Skip to label hangup to end this interview {NumberChange: 800.25 ''Collect new phone number \+
\*Please enter in the new phone number \+

\* \+\*New Phone Number\+\*: \_ \+

\* !var,p,25,10} {!phone,c,NumberChange,19 } ''Store new number in the phone file {!if Dialtype=0 !quota,,NumberChange,+1,now} ''Add 1 to the NumberChange quota if not dialer {!if DialType <> 1 !reset,Phonenumber } ''Reset back to top after number change {!phone,s,111} ''Jim R. sez set status to 111 and abort if predictive mode {!spc,b} {VMLeftMessage: !phone,s,175, 2 days} {!quota,,VMLeftMessage,+1,now} {!goto Hangup } >repeat $A=60,61,62,63,64,65,66,67,68,69,70,101,102,211,20,112;& $C=Refused,Disconnect,Nonbusiness,LanguageProb,FaxModem,OpIntercept,WrongNumber,& NotAtLocation,NoLongerInBus,WantMoreComp,WaitList,NoAnswer,Busy,Putback,Remove,VMNoMessage; {$C: !phone,s,$A} ''Set call status {!quota,,$C,+1,now } ''Add 1 to quota cell {!goto Hangup } ''Hang up >endrepeat {Hangup: !spc,b } ''Abort the interview {Continue: !phone,9 } ''Suspends will resume from this point forward {[PhoneNumber] Phone number !phone,g,phonenumber,18} {!DoMentor} {PASSWD: 825.20 '' Password from fone !PHONE,G,51,20 } {!-DoMentor} {USERNAME: 845.30 '' User name from fone !PHONE,G,71,30 } {TESTFLAG: 875.1 HIDE '' Test Flag (for hand testing) !FLD, 1 } {RotLoc: 876.10 HIDE ''Rotate seed for Subtype S !VAR,N,10,10 } { RotR: 886.3 Hide ''Rotate seed for Subtype R !VAR,N,3,3 } { RotF: 889.1 Hide ''Rotate seed for Subtype F !VAR,N,1,1 } { Check: 890.1 Hide ''Switch for boolean conditions !FLD 1 } {!AllowSuspend} {!if websurvent() <> 8 !goto InInterview} {!AllowTerminate} {InInterview: !phone,s,121 } ''Temporary status for in progress survey {!IF [PASSWD.4$]="test" '' Enable test flag for test passwords !GEN,A,TESTFLAG,1 } {!IF QUOTA(COMPLETES) >= QUOTA(COMPLETES.T) !goto OQ_COMPL } '' If other data/login info must be referred back to panel site, set HTML_DEFINEs here ''{!HTML_DEFINE PASSWORD \:PASSWD } '' HTML Define for Password (common) ''{!HTML_DEFINE LANG \:CURRLANG } '' HTML Define for Language (for ML studies) {!IF QUOTA(COMPLETES) >= QUOTA(COMPLETES.T) !goto OQ_COMPL } {!if websurvent() = 8 !goto TimerStart} '' ========== PANEL MANAGEMENT / DATA '' Use !GEN statements based on criteria/qualifiers to store panel company to data '' Will typically be based on password, username, or sample/phone,g data {PANELCO: 891.2 HIDE !FLD, 01 Panel Co 1 02 Panel Co 2 03 Panel Co 3 04 Panel Co 4 05 Panel Co 5 } '' ========== CUSTOM ERRORS {!ERRORMSG 1512 Please answer this question. } {!ERRORMSG 1758 Please answer the question above. } {!ERRORMSG 7112 Please review the %d questions below. } {!ERRORMSG 7113 Please review the question below. } {!ERRORMSG 7222 Attention: } ''Screener Start ''============== '' ========== BEGIN TIMER / STATBAR {TimerStart: !goto} {!-Rfton} {StartTime: 893.1 ''Start timers !spc,z,0 } {!Rfton} {!if websurvent() = 8 !goto StartScreen} {!STATUS_BAR QQ } '' Enables Status Bar {StartScreen: !goto} ''********************* Put Screener questions here! ************************** ''Example Check Screener Quotas ''============================= ''{!If quota(ScreenerQuo1) >=quota(Screenerquo1.t) '' ''
We have reached our quota for individuals in your demographic area, ''
thank you for your time.

'' ''!display} ''{!If quota(ScreenerQuo1) >=quota(Screenerquo1.t) ''!phone,s,72} ''{!If quota(ScreenerQuo1) >=quota(Screenerquo1.t) ''!quota,,ScreenerQuo1,+1,now} ''{!If quota(ScreenerQuo1) >=quota(Screenerquo1.t) ''!spc,b} {!DoMentor} {ScreenerSecs: 894.4 Seconds in Screener !spc,z,3} {!spc,e,e} ''Mark time in ivr log for start of main survey '' ========== BEGIN SURVEY (Header End Cut: From Beginning -> to here.) ''================= {grid_1: '' OPEN GRID: 1 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {q1: 1501.2 Which type of mobile device do you use as your primary means of communication? !FLD,R, 01 Apple iPhone 02 Apple iPad 03 Google Android 04 Blackberry 05 Palm 06 HTC Smartphone 07 Samsung Smartphone or Tablet } ''---------------------------- {!endgrid} '' CLOSE GRID: 1 {!RESUME_HERE} ''LISA {!if device$="desktop" or websurvent()=8 !goto grid_5} {grid_2: '' OPEN GRID: 2 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {Q1A_1: 1510.2 How would you rate \:Q1 on Price? !FLD 01 Very Poor 02 Poor 03 Average 04 Good 05 Very Good } ''---------------------------- {!endgrid} '' CLOSE GRID: 2 {grid_3: '' OPEN GRID: 3 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {Q1A_2: 1517.2 How would you rate \:Q1 on Performance? !FLD 01 Very Poor 02 Poor 03 Average 04 Good 05 Very Good } ''---------------------------- {!endgrid} '' CLOSE GRID: 3 {grid_4: '' OPEN GRID: 4 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {Q1A_3: 1524.2 How would you rate \:Q1 on Aesthetics? !FLD 01 Very Poor 02 Poor 03 Average 04 Good 05 Very Good } ''---------------------------- {!endgrid} '' CLOSE GRID: 4 ''LISA {!goto after_desktogrid} {grid_5: '' OPEN GRID: 5 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,RATING} ''[START] Attribute Scale QN {!html_error_prefix=} {!html_error_suffix=} {Q1B: How would you rate \:q1 on the following attributes?

!disp } {!rotate,s,,rotloc} >repeat $A=1,2,3;& $B=1531,1533,1535;& $C="",& "",& "";& $D="Price",& "Performance",& "Aesthetics"; {!group} {!HTML_RL_PREFIX= } {!HTML_RT_SUFFIX= } {Q1B_$A: $B.2 $C $D !FLD 01 \-Very Poor\* 02 \-Poor\* 03 \-Average\* 04 \-Good\* 05 \-Very Good\* } >endrepeat {!endrotate} {
  Very Poor Poor Average Good Very Good
1 2 3 4 5
} {!HTML_RL_SUFFIX=
!disp } ''---------------------------- {!endgrid} '' CLOSE GRID: 5 ''LISA {after_desktogrid: !goto} {!RESUME_WHERE_AT} {grid_6: '' OPEN GRID: 6 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {Q2: 1537.198 Which mobile web browsers have you used on your \:Q1:? !FLD,R,6 01 Opera Mobile 02 Opera Mini 03 Firefox Mobile 04 Google Android 05 Skyfire 06 Internet Explorer Mobile } ''---------------------------- {!endgrid} '' CLOSE GRID: 6 {grid_7: '' OPEN GRID: 7 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {!HTMLRADIOBUTTONS=1 } '' Drop down toggle. {Q3A: 1834.2 Which mobile OS do you feel is the most user friendly in terms of ease of use and app availability? !FLD == Please select an OS 01 Symbian OS (Nokia) 02 Android (Google) 03 iOS (Apple) 04 Blackberry OS (Research in Motion) 05 Windows Mobile (Microsoft) } {!HTMLRADIOBUTTONS=200 } ''---------------------------- {!endgrid} '' CLOSE GRID: 7 {grid_8: '' OPEN GRID: 8 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {!HTMLRADIOBUTTONS=1 } {Q3B: 1841.2 Of the free applications below, which would you consider the most useful to you? !FLD == Please select a response == 01 Facebook 02 Twitter 03 LinkedIn == 04 Pandora 05 Last.fm == 06 Google Talk 07 Skype } {!HTMLRADIOBUTTONS=200 } ''---------------------------- {!endgrid} '' CLOSE GRID: 8 {grid_9: '' OPEN GRID: 9 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} {q4: 1850.4 In what year did you purchase your first mobile device? !NUM,b,,1970-2013,,DK:"Don't Know"} ''---------------------------- {!endgrid} '' CLOSE GRID: 9 {grid_10: '' OPEN GRID: 10 !grid} ''---------------------------- {!SYS,C,CLEAR} {!SYS,C,DEFAULT} ''LAST Q'NNAIRE COLUMN {Q5: 1854.70 Please enter your email address: !VAR,BE,70,0} ''---------------------------- {!endgrid} '' CLOSE GRID: 10'' ========== END SURVEY :: INCREMENT QUOTA AND STATCODE {Mainsecs: 898.4 Seconds in Main survey !spc,z,3} {!if IntvwrModes(D) \+
\*Debug mode interview has ended, click 'next' to continue \+
\* !display } >ifdefine @Test {!if IntvwrModes(D) !spc,B } >endif { !if websurvent() = 8 \+
\*That concludes our interview. Thank you for your time. \+

\* !display} {!QUOTA,1,COMPLETES,1 } '' Increments overall completes { !IF [STATCODE^^B] !GEN,A,STATCODE,001 } '' Completed Interview in Statcode ''{!HTML_DEFINE REFER http://www.cfmc.com/?pass=\:PASSWD:&status=1 } {!GOTO END } '' Go to end of survey / timer '' ========== OVERQUOTA / TERMINATES '' We separate overquota and terminates here, as some panel companies want to differentiate between each ''{!HTML_DEFINE REFER http://www.cfmc.com/?pass=\:PASSWD:&status=3 } ''===================== {OQ_COMPL: !goto} {!gen,a,statcode,014 } {!phone,s,14 } {!quota,,OQ_COMP,1,now} {!-DoMentor} {ChkFoneOQ: [chkfone] !EXPR,Z,chkfone+FoneStatus() } {!DoMentor} { !if websurvent() = 8 This study is complete. No more data is being collected. Thank you for your time. !disp} {!goto termend } ''===================== ''===================== {CLOSED2: !GOTO } '' Send terminates here '' ========== TERMINATE BLOCK ''{!TERMINATE } ''{!HTML_DEFINE REFER http://www.cfmc.com/?pass=\:PASSWD:&status=4 } {!QUOTA,1,TERMINATE,1 } '' Increment Term Quota {!PHONE,S,004} '' Fone file status set for Terminate {!GEN,A,STATCODE,004} '' Statcode set for Terminate { !if websurvent() = 8 You have been terminated from this survey. Thank you for your time. !disp} {!GOTO TERMEND} ''===================== {termend: !goto } {!-DoMentor} {TermQuestion: 902.30 '' Records last question !SPC,V } {!if [statcode^^B] !GEN,A,STATCODE,004} '' Statcode set for Terminate >ifdef @SAVETERM {!spc,a} ''assign case id {!SPC,W} '' If SAVETERM defined above, saves terminate data >endif {!if [statcode^^B] !PHONE,S,004} '' Fone file status set for Terminate {!SPC,B} '' Terminate Respondent {!GOTO END} ''{!ENDTERMINATE } '' ========== SUSPEND BLOCK ''LISA {!SUSPEND } {!SYS,C,DEFAULT} {!-DoMentor} {SuspendQuestion: 932.30 '' Records last question !SPC,V } {SuspendFlag: 962.1 hide Whether Suspended !field 1 Suspended Interview } {!gen,a,SuspendFlag,1 } '' Generates suspend flag {SuspendName: 963.30 !if websurvent() = 8 \+
\*Who should I ask for when I call back to continue the survey? \+

\* \+\*Enter callback name\+\*: \_ \+

\* !var,,30,2} {Suspendtime: 993.18 !if websurvent() = 8 Date/Time Suspended Interview (yyyymmddhhmmssdjjj) !spc,3} {!IF WEBSURVENT()= 8 ''if webcati, skip section below !goto end1} {WebToPhone_ApptSetup: !grid,b} {Numbchng2: 1930.10 ''Collect new phone number. You have the option of taking the survey on the phone.
Please fill in the details below to set up the appointment or leave blank to finish later on your device.

New Phone Number: !VAR,P,10,10} ''{!SYS,C,CLEAR } '' now setup appt. {Callbck2: [SuspendName] '' Collect callback name if needed. May we please have your name so we can ask for you when we call back? !VAR,,30,2} {!endgrid} {!if [Numbchng2^^nb] !gen,m,Phonenumber,Numbchng2} ''as we do not want to show the websurvent number in question Numbchng2 {Newnumb2: !if [Numbchng2^^nb] !PHONE,C,[Phonenumber],10 } ''Store new number in the phone file. {!if [Numbchng2^^nb] and WEBSURVENT()=1 !PHONE,S,222} ''call first stack {end1: !goto} {!IF WEBSURVENT()=2 '' Assigns 108 Status and Increments Quota for Auto-Suspend !PHONE,S,108 } {!IF WEBSURVENT()=2 !QUOTA,1,AUTO_SUSPEND,1 } {!IF [Numbchng2^^b] and WEBSURVENT()=1 '' Assigns 105 Status and Increments Quota for Manual Suspend !PHONE,S,105 } {!IF WEBSURVENT()=1 !QUOTA,1,MAN_SUSPEND,1} {!DoMentor} {!if [Numbchng2^^nb] and WEBSURVENT()=1 !html_define webtophone} {!ENDSUSPEND } '' ========== RESUME BLOCK {!RESUME } {!-DoMentor} {ResumeFlag: 1011.1 hide Whether Resumed Interview !field 1 Resumed Interview } {!gen,a,ResumeFlag,1 } {ResumeTime: 1012.18 Resume Date/time (yyyymmddhhmmssdjjj) !spc,3 } {RPREPTIM: 1030.10 '' Resume prep time, compare with PREPTIME if resume issues !SPC,7,56,10 } { !if websurvent() = 8 \+

\* Respondent: \|SuspendName|

This interview was suspended at question: \:SuspendQuestion: \+

\* !display} {!DoMentor} {!SPC,L,device,1,7} '' from the USER_DATA hidden input { [DEVICE] !if [3624.1#1] and localscratch(1,7)=" " !exp,s,,"desktop"} { [DEVICE] !if [3624.1#2] and localscratch(1,7)=" " !exp,s,,"isphone"} {!HTML_DEFINE DEVICE \|device } {!ENDRESUME } '' ========== END OF SURVEY {END: !GOTO } >IfDef @Test >Else {!If TestFlag(1) !SPC,B } >EndIf {!DoMentor} {InterviewSeconds: 1040.9 !SPC,Z,1 } {InterviewMinutes: 1049.9 !Expr,,2,[InterviewSeconds]/60 } {!-DoMentor} >ifdef @Timeout {!phone,p,@Timeloc,InterviewMinutes,9} >endif >ifdef @quotaout {[quotagrp] !If StatCode(001) !expr,Z,,001} {!phone,p,@quotaloc,quotagrp,3} >endif {total_backups: 1058.3 ''counts total number of backups !spc,7,68,3} {Cons_Backups: 1061.3 ''counts total number of consecutive backups !spc,7,72,3} {!if statcode(001) !phone,s,1} { QInfo2: 1064.68 ''Store Complete Q'aire Information !SPC,7 } {!-RFTON } { EPrpTime: [QInfo2+57.10] ''Date/Time of Compile !VAR,A,10,0 } {LanguageUsed: 1132.2 Language used in survey !spc,7,110,2} {!DoMentor} ~end