RSS Git Download  Clone
Raw Blame History
[% content_only = 1 # no html wrappers %]

<!-- BEGIN record/body.tt -->
  [%
	data    = request.data; # PROCESS dumper.tt dump = data.request_trial.as_tree;
	patient = data.patient_case.patient;
	history = request.history;
  %]
  
[% IF c.cfg('settings').local_prefix == 'RR8' # all to end; else process local_body.tt %]
  [%
	footer =
	  c.cfg('settings').lab_name_abbreviation _ ', ' _
	  c.cfg('settings').service_address _ ' Tel. ' _
	  c.cfg('settings').service_telno
  %]  
  <!-- FOOTER CENTER "[% footer %]" -->

	[% # PROCESS dumper.tt dump = request.raw_lab_test_data.result_summaries %]
	[% # PROCESS dumper.tt dump = context_warning_map %]
	[% # PROCESS dumper.tt dump = nhs_number_exempt %]
	[% # PROCESS dumper.tt dump = report_error_codes %]
    [% # PROCESS dumper.tt dump = dispatch_log %]
    [% # PROCESS dumper.tt dump = request %]
	[% # PROCESS dumper.tt dump = request.result_summaries %]
    [% # PROCESS dumper.tt dump = request.previous_diagnoses %]
	[% # PROCESS dumper.tt dump = request.special_formatting %]
	
	[% # FOREACH foo IN request.all_results;
	   # PROCESS dumper.tt dump = foo.as_tree; END %]
	  
  [% UNLESS active_link.match('printrun') # printrun gets its own back_button %]
	<p class="classname">[% site.html.back_button %]</p>
  [% END %]
  
  <center>
    <p>
      <font color="blue" size="+3">
        [% c.cfg('settings').service_name %]
      </font>
    </p>
      
    <h3 align="center">
      Pathology Report on [% c.cfg('settings').lab_name_abbreviation %] Ref No:
      [% PROCESS site/lab_number.tt; want_url=0 %]
    </h3>
    
    [% IF request.has_optional.clinical_trial;
        trial_number = get_trial_number(patient.id, data.request_trial.trial_id) %]
        <h4>
            <font color="green">
            CLINICAL TRIAL: [% data.request_trial.trial.trial_name %]
            [% IF trial_number %][ [% trial_number %] ][% END %]
            </font>
        </h4>
    [% END %]
  </center>
   
  <table width="100%" cellpadding="3">
    <tr>
      <td valign="top">
        <i><font size="+1">Patient ID</font></i>
        <blockquote>
          Name: <b>
            [% patient.last_name   | upper %],
            [% format_firstname(patient) || patient.first_name | ucfirst %]
            [% patient.middle_name | ucfirst %]
          </b> <br />
          DoB: [% patient.dob.strftime('%d.%b.%Y') %] <br />
		  [% IF patient.nhs_number %]
			NHS No: [% PROCESS site/nhs_number.tt nhs_number = patient.nhs_number %]
			[% IF data.patient_case.unit_number %]
			  [[% data.patient_case.unit_number %]]
		    [% END %]
		  [% ELSE;
                presentation = data.request_initial_screen.screen.description;
                trial_name   = data.request_trial.trial.trial_name;
                
			  UNLESS # one of exempted categories:
                  nhs_number_exempt.presentation.item(presentation) OR
                  nhs_number_exempt.clinical_trial.item(trial_name)
               %]
				NHS No: <font color="red"><b>please use the NHS no</b></font><br />
			  [% END %]
		    Hospital No: [% data.patient_case.unit_number || 'unknown' %]
		  [% END %]
        </blockquote>
      </td>
      <td valign="top"><i><font size="+1">Source</font></i>
        <blockquote>
          Referrer: [% data.referrer_department.referrer.name %]
		  [[% data.referrer_department.hospital_department.display_name %]] <br />
          Source: [% data.patient_case.referral_source.display_name | html %] <br />
          Date received: [% data.created_at.strftime('%d.%b.%Y %H:%m') %]
        </blockquote>
      </td>
    </tr>
  </table>
  
  <p>
    <font size="+1"><i>Specimen</i></font>
  </p>
  
  <blockquote>
    Type: [% request.specimen_map.item(data.id).description.join('; ') | html %]
    [% IF data.request_external_ref %]
        [[% data.request_external_ref.external_reference | html %]]
    [% END %]
    <br />
    [% IF data.request_gross_description %]
	  Gross Description: [% data.request_gross_description.detail | html %]<br />
	[% END %]
    Quality: [% data.request_report.specimen_quality %]
  </blockquote>
  
  [% UNLESS request.special_formatting.skip_clinical_details %]
  <p>
    <font size="+1"><i>Clinical Details</i></font>
  </p>
  
  <blockquote>
	[% symbolise(data.request_report.clinical_details) %]
  </blockquote>
  [% END %]
  
  [% # IF request.result_summaries.size; # not needed - will skip sections with results but no results_summary
	FOREACH section IN request.all_results; # PROCESS dumper.tt dump = section.key;
		# only want results_summary sections:
		NEXT UNLESS section.value.has_result_summary.match('yes');
        
		section_result_summary = request.result_summaries.item(section.key);		
		test_results = [ ]; # reset array
        p53_data = {}; # for composite p21/p53 result
        
		FOREACH t IN section.value.test; # PROCESS dumper.tt dump = t; 
		  NEXT UNLESS t.value.result;
		  IF t.value.result.match('\d'); # add % sign:
			t.value.result = t.value.result _ '%';
          END;
          
          # composite p21/p53 result:
          IF section.key == 'Immunohistochemistry';
            IF t.value.test_name == 'p21';
              p53_data.p21 = t.value.result; NEXT;
            ELSIF t.value.test_name == 'p53';
              p53_data.p53 = t.value.result; NEXT;
            END;
          END;
          
		  result = t.key _ '<sup>' _ t.value.result _ '</sup>';
		  test_results.push(result);
		END;
        
        IF p53_data.size; # PROCESS dumper.tt dump = p53_data;
            p53_result = 'p53' _ '<sup>' _ composite_p53(p53_data) _ '</sup>';
            test_results.push(p53_result);
        END;
	  %]

	  [% # skip unless results summary or test results:
		NEXT UNLESS section_result_summary || test_results.size %]
	  <p>
		[% section_name = section.key | lower %]
		<font size="+1">
		  <i>[% # ? override default section name eg imatinib monitoring:
			  request.special_formatting.section_name_map.item(section_name) 
			  || section.key %] <!-- Summary -->
		  </i>
		</font>
	  </p>

	  [% IF test_results.size; result = test_results.join(' ') %]
		<blockquote><p>[% result %]</p></blockquote>
	  [% END %]
	  
	  [% IF section_result_summary %]
	  <blockquote>
		<p>
		  [% UNLESS request.special_formatting.no_comment # eg imatinib monitoring %]
		  Comment:
		  [% END %]
		  
		  [% # highlight section if timestamp > auth/report time:
			ref_time = request.status_options.authorised.is_active.match('yes')
			  ? history.authorised.time : history.reported.time;
            # next line = fatal error if auth action not recorded in History file:
			font_color = section_result_summary.time > ref_time ? 'red' : 'black';
		  %]
		  <font color="[% font_color %]">
			[% symbolise(section_result_summary.results_summary)
			  | html_line_break # escapeHTML already done %]
		  </font>
		</p>
	  </blockquote>
	  [% END %]
	  
      <!-- BEGIN chart -->
      [% PROCESS site/make_chart.tt format_info = request.special_formatting %]
      <!-- END chart -->
  
	[% END %]
  [% # END %]

  [% UNLESS request.special_formatting.skip_morphology %]
  <p>
    <font size="+1"><i>Morphology &amp; Comments</i></font>
  </p>
  
  <blockquote>
	[%
	  raw_comment = line_break(data.request_report.comment);
	  formatted_comment = symbolise(raw_comment);
		# highlight 'additional comment':
	  text = '<font color="red">ADDITIONAL COMMENT</font>';
	  formatted_comment.replace('[Aa]dditional [Cc]omment', text) | html_line_break;
	%]
  </blockquote>
  [% END %]
  
  [%
    UNLESS request.special_formatting.skip_diagnosis;

    diagnosis = data.request_report.diagnosis.name | html;
    
    IF request.previous_diagnoses.size;
        FOREACH entry IN request.previous_diagnoses; # PROCESS dumper.tt dump = entry.as_tree;
            IF entry.diagnosis.name != diagnosis # not same as diagnosis and not changed at auth:
                AND history.authorised.time.delta_days(entry.time).delta_days;
                diagnosis = '<font color="red">' _ diagnosis _ '</font>';
                LAST;
            END;
        END;
    END;
  %]     
        <p>
            <font size="+1">
              <i>Diagnosis</i>: <b>[% diagnosis %]</b>
              [% IF data.request_report.diagnosis.icdo3 %]
                [[% data.request_report.diagnosis.icdo3 %]]
              [% END %]
            </font>
       </p>
  [% END %]
  
  [% IF context_warning_map.item(data.request_report.diagnosis.id) %]
	<p><b>Note</b>:
	  [% context_warning_map.item(data.request_report.diagnosis.id) %]
	</p>
  [% END %]
  
  [% IF request_errors.size;
	  errs = [ ];
	  FOREACH entry IN request_errors; # only want reportable errs:
		  err_code = entry.error_code.code; uc_err_code = err_code | upper;
		  NEXT UNLESS report_error_codes.item(err_code);
		  err_str = report_error_codes.item(err_code).description
			_ ' [' _ uc_err_code _ ']';
		  errs.push(err_str);
		END;
	  IF errs.size; %]		
	  <p>
		<b><font color="red">
		  PLEASE NOTE - request was received with the following
			error[% IF request_errors.size > 1 %]s[% END %]
        </font></b>:        
        <blockquote>
			[% FOREACH err IN errs %]
			  <font color="red">* [% err %]</font><br />
			[% END %]
		</blockquote>
	  </p>
  [% END; END; %]
	
  <p align="right">
    Reported by:
	<b>[% history.reported.user.first_name | ucfirst %]</b>
	<b>[% history.reported.user.last_name  | ucfirst %]</b>	
	on [% history.reported.time.strftime('%d.%b.%Y at %H:%M') %]
  [% IF history.authorised %]
	<br />
    Report authorised by:
	<b>[% history.authorised.user.first_name | ucfirst %]</b>
	<b>[% history.authorised.user.last_name  | ucfirst %]</b>	
	on [% history.authorised.time.strftime('%d.%b.%Y at %H:%M') %]
  [% END %]
  </p>
  
  [% BLOCK amended_report %]
        <p align="center">
          <font color="red">
            <strong>** please note this is an amended report which supercedes any
              previous report on this HMDS reference number **</strong>
          </font>
        </p>  
        [% FOREACH entry IN request.previous_diagnoses;
                # PROCESS dumper.tt dump = entry.as_tree %]
            <p align="right">
              Amended report issued by:
                <b>[% entry.user.first_name | ucfirst %]</b>
                <b>[% entry.user.last_name  | ucfirst %]</b>	
                on [% entry.time.strftime('%d.%b.%Y') %]
                at [% entry.time.strftime('%T').match('00:00:00') # for legacy data
                    ? '??:??' : entry.time.strftime('%H:%M') %]
            </p>
        [% END %]
  [% END %]
  
  [%
    IF request.previous_diagnoses.size;
        FOREACH entry IN request.previous_diagnoses;
            IF history.authorised.time.delta_days(entry.time).delta_days; # ie not same date
                PROCESS amended_report;
                LAST; # only needed once
            END;
        END;
    END;
   %]
	
  [% IF dispatch_log.size %]
	<p align="right">
	[% FOREACH report IN dispatch_log %]
	  Report sent to:
		[% report.recipient %] on [% report.time.strftime('%d.%b.%Y at %H:%M') %]
		[% UNLESS loop.last %]<br />[% END %]
	[% END %]
	</p>
  [% END %]
  
  <p align="right">
	<font color="red">
	  PLEASE NOTE: the definitive report is available online at
	  [% c.cfg('settings').service_url %]
	</font>	
  </p>    
[% ELSE; INCLUDE record/local_body.tt; END %]
<!-- END record/body.tt -->