# updates hilis4.ngis_diagnosis table using $src file
# safe to re-run, just updates existing data UNLESS data updated through app!!
use strict;
use warnings;
use Getopt::Std;
getopts('q');
our($opt_q);
# switch on sql output to console:
$ENV{SQL_TRACE} = $opt_q;
#===============================================================================
my $src = 'Diagnostic_terms_coded_to_GeNEQ_clinical_indication.xlsx';
#===============================================================================
use Spreadsheet::Read qw(ReadData rows);
use FindBin qw($Bin);
use Data::Printer;
use Modern::Perl;
use lib '/home/raj/perl-lib';
use Local::DB;
my $dbix = Local::DB->dbix({ dbname => 'hilis4' });
my $xls = ReadData($Bin.'/'.$src) || die "cannot read $src"; # p $xls; exit;
# active diagnoses:
my $active = $xls->[2]; # p $active; # 2nd sheet
# inactive diagnoses:
my $inactive = $xls->[3]; # p $inactive; # 3rd sheet
my @rows = ( rows($active), rows($inactive) ); # p @rows; exit;
my $headers = shift @rows; # p $headers; exit;
my $diagnoses
= $dbix->select('diagnoses', [ qw/name id/ ])->map; # p $diagnoses;
my $ngis_ids
= $dbix->select('ngis_clinical_indications', [ qw/code id/ ])->map; # p $ngis_ids;
# clear existing:
$dbix->dbh->do('TRUNCATE TABLE ngis_diagnosis');
ROW:
for my $row (@rows) { # p $row; next; # arrayref
my ($diagnosis, $indication) = @$row[0,1]; # 1st 2
# p $diagnosis; p $indication;
# skip row if text not M + digits (eg Clinical trials, Non-diagnostic, etc):
next ROW unless $indication && $indication =~ /^M\d+/; # ie non-ICDO3
# p $diagnosis; p $indication;
$diagnosis =~ s/'/'/;
$diagnosis =~ s/&/&/g;
$diagnosis =~ s/</</g;
$diagnosis =~ s/>/>/g; # p $diagnosis;
my $diagnosis_id = $diagnoses->{$diagnosis};
say "no id for $diagnosis" and next ROW if not $diagnosis_id;
my $indication_id = $ngis_ids->{$indication};
say "no indication_id for $indication" and next ROW if not $indication_id;
$dbix->insert('ngis_diagnosis',
{ diagnosis_id => $diagnosis_id, ngis_indication_id => $indication_id });
}