ONCOSUR3 ;HINES OIFO/RTK - ONCOSUR continued ;08/03/23
 ;;2.2;ONCOLOGY;**18,20,21**;Jul 31, 2013;Build 6
 ;
 Q
 ;
SPSIT23 ;Input transform for 2023+ surgery primary site fields (58.8,58.9)
 S X=$TR(X,"ab","AB")
 N TOP S TOP=$P($G(^ONCO(165.5,D0,2)),U,1) I TOP="" W "  No PRIMARY SITE" K X Q
 N ICD S ICD=""
 S HST14=$E($$GET1^DIQ(165.5,D0,22.1),1,4)
 I $$HEMATO^ONCFUNC(D0) S ICD=67420
 I ICD'=67420 S ICD=$P($G(^ONCO(164,TOP,0)),U,16) I ICD="" S Y="" Q
 S ONCEDVAL=""
 S ONCUSEB=0,ONCXVAL="D" D CHK24BCD I ONCUSEB=1 S ONCXVAL="E"  ;A-CODES ON "D" X-REF, B-CODES ON "E" X-REF
 N COD S COD="" F  S COD=$O(^ONCO(164,ICD,"SPS",ONCXVAL,COD)) Q:COD=""  D
 .S ONCEDVAL=ONCEDVAL_"^"_COD
 I ONCEDVAL'[X K X Q
 S ONCCDIEN=$O(^ONCO(164,ICD,"SPS",ONCXVAL,X,"")) I ONCCDIEN="" W "??" K X Q
 W "  ",$P($G(^ONCO(164,ICD,"SPS",ONCCDIEN,0)),U,1)
 K ONCEDVAL,ONCCDIEN,ONCUSEB,ONCXVAL Q
 ;
SPSOT23 ;Output transform for 2023+ surgery primary site fields (58.8,58.9)
 N TOP S TOP=$P($G(^ONCO(165.5,D0,2)),U,1) I TOP="" Q
 N INTSRVAL
 I $G(FIELD)=58.8 S INTSRVAL=$P($G(^ONCO(165.5,D0,3.2)),U,8) I INTSRVAL="" Q
 I $G(FIELD)=58.9 S INTSRVAL=$P($G(^ONCO(165.5,D0,3.2)),U,9) I INTSRVAL="" Q
 N ICD S ICD=""
 S HST14=$E($$GET1^DIQ(165.5,D0,22.1),1,4)
 I $$HEMATO^ONCFUNC(D0) S ICD=67420
 I ICD'=67420 S ICD=$P($G(^ONCO(164,TOP,0)),U,16) I ICD="" Q
 S ONCUSEB=0,ONCXVAL="D" D CHK24BCD I ONCUSEB=1 S ONCXVAL="E"  ;A-CODES ON "D" X-REF, B-CODES ON "E" X-REF
 S SRVALIEN=$O(^ONCO(164,ICD,"SPS",ONCXVAL,INTSRVAL,"")) I SRVALIEN="" Q
 I ONCUSEB=0 S Y=$P($G(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,3)_" "_$P($G(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,1)
 I ONCUSEB=1 S Y=$P($G(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,4)_" "_$P($G(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,1)
 K ONCUSEB,ONCXVAL Q
 ;
SPSHP23 ;Help for 2023+ surgery primary site fields (58.8,58.9)
 ;  A and B codes used for surgery codes 2023+
 N SYSDIS S SYSDIS=""
 S TOP=$P($G(^ONCO(165.5,D0,2)),U,1) I TOP="" W !,"No PRIMARY SITE" Q
 S SCDXDT=$P($G(^ONCO(165.5,D0,0)),U,16) I SCDXDT="" Q
 D
 .S (EX,CTR)=0
 .S TOP=$P($G(^ONCO(165.5,D0,2)),U,1) I TOP="" W !,"No TOPOGRAPHY!" Q
 .S HST14=$E($$GET1^DIQ(165.5,D0,22.1),1,4)
 .I $$HEMATO^ONCFUNC(D0) S ICD=67420,SYSDIS=1
 .I SYSDIS="" S ICD=$P($G(^ONCO(164,TOP,0)),U,16) I ICD="" W !,"No ICD Codes!" Q
 .;I ($G(FIELD)=58.2)!($G(FIELD)=50.2),($E(TOP,3,4)=76)!(TOP=67809)!(TOP=67420)!(TOP=67421)!(TOP=67423)!(TOP=67424) S ICD=67141
 .;I ($G(FIELD)=58.2)!($G(FIELD)=50.2),TOP=67422 S ICD=67770
 .I $G(SYSDIS)=1 W !?3,"SURGICAL PROCEDURE codes for systemic disease: ",!
 .E  W !?3,"SURGICAL PROCEDURE codes for site ",$P($G(^ONCO(164,TOP,0)),U,2)," ",$P($G(^ONCO(164,TOP,0)),U,1),": ",!
 .S ONCUSEB=0,ONCXVAL="D" D CHK24BCD I ONCUSEB=1 S ONCXVAL="E"  ;A-CODES ON "D" X-REF, B-CODES ON "E" X-REF
 .S XSP="" F  S XSP=$O(^ONCO(164,ICD,"SPS",ONCXVAL,XSP)) Q:XSP=""  S SPSIEN=$O(^ONCO(164,ICD,"SPS",ONCXVAL,XSP,0)) D  Q:EX=U
 ..S ONCDESC=$P($G(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,1)
 ..S ONCOLDCD=$P($G(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,2)
 ..S ONC23ACD=$P($G(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,3)
 ..S ONC23BCD=$P($G(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,4)
 ..I ONCUSEB=0,ONC23ACD="" Q
 ..I ONCUSEB=1,ONC23BCD="" Q
 ..;I (ONC23ACD="")&(ONC23BCD="") Q
 ..S ONCDSPCD=$S(ONCUSEB=1:ONC23BCD,1:ONC23ACD)
 ..S CTR=CTR+1 I CTR#20=0 D P Q:EX=U
 ..I (ICD=67000)!(ICD=67090)!(ICD=67250)!(ICD=67569) D TRANSLT
 ..W !?5,ONCDSPCD,?12,ONCDESC
 ..K ONCOLDCD,ONC23ACD,ONC23BCD,ONCDSPCD,ONCDESC Q
 W !
 K CTR,EX,HST14,ICD,SCDXDT,SPSIEN,TOP,XSP,ONCUSEB,ONCXVAL
 Q
 ;
CHK24BCD ;Check for 2024+ cases with B-codes:
 ; 2024: Breast(67500),Colon(67180),Lung(67340),Pancreas(67250),Thyroid(67739)
 S ONCUSEB=0
 I ICD=67500,$P($G(^ONCO(165.5,D0,0)),U,16)>3231231 S ONCUSEB=1
 I ICD=67180,$P($G(^ONCO(165.5,D0,0)),U,16)>3231231 S ONCUSEB=1
 I ICD=67340,$P($G(^ONCO(165.5,D0,0)),U,16)>3231231 S ONCUSEB=1
 I ICD=67250,$P($G(^ONCO(165.5,D0,0)),U,16)>3231231 S ONCUSEB=1
 I ICD=67739,$P($G(^ONCO(165.5,D0,0)),U,16)>3231231 S ONCUSEB=1
 Q
 ;
TRANSLT ; Convert some 2 digit codes in description to new 4 character codes
 I ONCDESC["41" S ONCDESC=$P(ONCDESC,"41",1)_"A410"_$P(ONCDESC,"41",2)
 I ONCDESC["42" S ONCDESC=$P(ONCDESC,"42",1)_"A420"_$P(ONCDESC,"42",2)
 I ONCDESC["51" S ONCDESC=$P(ONCDESC,"51",1)_"A510"_$P(ONCDESC,"51",2)
 I ONCDESC["52" S ONCDESC=$P(ONCDESC,"52",1)_"A520"_$P(ONCDESC,"52",2)
 I ONCDESC["54" S ONCDESC=$P(ONCDESC,"54",1)_"A540"_$P(ONCDESC,"54",2)
 I ONCDESC["61" S ONCDESC=$P(ONCDESC,"61",1)_"A610"_$P(ONCDESC,"61",2)
 I ONCDESC["62" S ONCDESC=$P(ONCDESC,"62",1)_"A620"_$P(ONCDESC,"62",2)
 Q
P D  Q:EX=U  W !
 .W ! K DIR S DIR(0)="E" D ^DIR I 'Y S EX=U Q
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HONCOSUR3   4690     printed  Sep 23, 2025@20:01:58                                                                                                                                                                                                    Page 2
ONCOSUR3  ;HINES OIFO/RTK - ONCOSUR continued ;08/03/23
 +1       ;;2.2;ONCOLOGY;**18,20,21**;Jul 31, 2013;Build 6
 +2       ;
 +3        QUIT 
 +4       ;
SPSIT23   ;Input transform for 2023+ surgery primary site fields (58.8,58.9)
 +1        SET X=$TRANSLATE(X,"ab","AB")
 +2        NEW TOP
           SET TOP=$PIECE($GET(^ONCO(165.5,D0,2)),U,1)
           IF TOP=""
               WRITE "  No PRIMARY SITE"
               KILL X
               QUIT 
 +3        NEW ICD
           SET ICD=""
 +4        SET HST14=$EXTRACT($$GET1^DIQ(165.5,D0,22.1),1,4)
 +5        IF $$HEMATO^ONCFUNC(D0)
               SET ICD=67420
 +6        IF ICD'=67420
               SET ICD=$PIECE($GET(^ONCO(164,TOP,0)),U,16)
               IF ICD=""
                   SET Y=""
                   QUIT 
 +7        SET ONCEDVAL=""
 +8       ;A-CODES ON "D" X-REF, B-CODES ON "E" X-REF
           SET ONCUSEB=0
           SET ONCXVAL="D"
           DO CHK24BCD
           IF ONCUSEB=1
               SET ONCXVAL="E"
 +9        NEW COD
           SET COD=""
           FOR 
               SET COD=$ORDER(^ONCO(164,ICD,"SPS",ONCXVAL,COD))
               if COD=""
                   QUIT 
               Begin DoDot:1
 +10               SET ONCEDVAL=ONCEDVAL_"^"_COD
               End DoDot:1
 +11       IF ONCEDVAL'[X
               KILL X
               QUIT 
 +12       SET ONCCDIEN=$ORDER(^ONCO(164,ICD,"SPS",ONCXVAL,X,""))
           IF ONCCDIEN=""
               WRITE "??"
               KILL X
               QUIT 
 +13       WRITE "  ",$PIECE($GET(^ONCO(164,ICD,"SPS",ONCCDIEN,0)),U,1)
 +14       KILL ONCEDVAL,ONCCDIEN,ONCUSEB,ONCXVAL
           QUIT 
 +15      ;
SPSOT23   ;Output transform for 2023+ surgery primary site fields (58.8,58.9)
 +1        NEW TOP
           SET TOP=$PIECE($GET(^ONCO(165.5,D0,2)),U,1)
           IF TOP=""
               QUIT 
 +2        NEW INTSRVAL
 +3        IF $GET(FIELD)=58.8
               SET INTSRVAL=$PIECE($GET(^ONCO(165.5,D0,3.2)),U,8)
               IF INTSRVAL=""
                   QUIT 
 +4        IF $GET(FIELD)=58.9
               SET INTSRVAL=$PIECE($GET(^ONCO(165.5,D0,3.2)),U,9)
               IF INTSRVAL=""
                   QUIT 
 +5        NEW ICD
           SET ICD=""
 +6        SET HST14=$EXTRACT($$GET1^DIQ(165.5,D0,22.1),1,4)
 +7        IF $$HEMATO^ONCFUNC(D0)
               SET ICD=67420
 +8        IF ICD'=67420
               SET ICD=$PIECE($GET(^ONCO(164,TOP,0)),U,16)
               IF ICD=""
                   QUIT 
 +9       ;A-CODES ON "D" X-REF, B-CODES ON "E" X-REF
           SET ONCUSEB=0
           SET ONCXVAL="D"
           DO CHK24BCD
           IF ONCUSEB=1
               SET ONCXVAL="E"
 +10       SET SRVALIEN=$ORDER(^ONCO(164,ICD,"SPS",ONCXVAL,INTSRVAL,""))
           IF SRVALIEN=""
               QUIT 
 +11       IF ONCUSEB=0
               SET Y=$PIECE($GET(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,3)_" "_$PIECE($GET(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,1)
 +12       IF ONCUSEB=1
               SET Y=$PIECE($GET(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,4)_" "_$PIECE($GET(^ONCO(164,ICD,"SPS",SRVALIEN,0)),U,1)
 +13       KILL ONCUSEB,ONCXVAL
           QUIT 
 +14      ;
SPSHP23   ;Help for 2023+ surgery primary site fields (58.8,58.9)
 +1       ;  A and B codes used for surgery codes 2023+
 +2        NEW SYSDIS
           SET SYSDIS=""
 +3        SET TOP=$PIECE($GET(^ONCO(165.5,D0,2)),U,1)
           IF TOP=""
               WRITE !,"No PRIMARY SITE"
               QUIT 
 +4        SET SCDXDT=$PIECE($GET(^ONCO(165.5,D0,0)),U,16)
           IF SCDXDT=""
               QUIT 
 +5        Begin DoDot:1
 +6            SET (EX,CTR)=0
 +7            SET TOP=$PIECE($GET(^ONCO(165.5,D0,2)),U,1)
               IF TOP=""
                   WRITE !,"No TOPOGRAPHY!"
                   QUIT 
 +8            SET HST14=$EXTRACT($$GET1^DIQ(165.5,D0,22.1),1,4)
 +9            IF $$HEMATO^ONCFUNC(D0)
                   SET ICD=67420
                   SET SYSDIS=1
 +10           IF SYSDIS=""
                   SET ICD=$PIECE($GET(^ONCO(164,TOP,0)),U,16)
                   IF ICD=""
                       WRITE !,"No ICD Codes!"
                       QUIT 
 +11      ;I ($G(FIELD)=58.2)!($G(FIELD)=50.2),($E(TOP,3,4)=76)!(TOP=67809)!(TOP=67420)!(TOP=67421)!(TOP=67423)!(TOP=67424) S ICD=67141
 +12      ;I ($G(FIELD)=58.2)!($G(FIELD)=50.2),TOP=67422 S ICD=67770
 +13           IF $GET(SYSDIS)=1
                   WRITE !?3,"SURGICAL PROCEDURE codes for systemic disease: ",!
 +14          IF '$TEST
                   WRITE !?3,"SURGICAL PROCEDURE codes for site ",$PIECE($GET(^ONCO(164,TOP,0)),U,2)," ",$PIECE($GET(^ONCO(164,TOP,0)),U,1),": ",!
 +15      ;A-CODES ON "D" X-REF, B-CODES ON "E" X-REF
               SET ONCUSEB=0
               SET ONCXVAL="D"
               DO CHK24BCD
               IF ONCUSEB=1
                   SET ONCXVAL="E"
 +16           SET XSP=""
               FOR 
                   SET XSP=$ORDER(^ONCO(164,ICD,"SPS",ONCXVAL,XSP))
                   if XSP=""
                       QUIT 
                   SET SPSIEN=$ORDER(^ONCO(164,ICD,"SPS",ONCXVAL,XSP,0))
                   Begin DoDot:2
 +17                   SET ONCDESC=$PIECE($GET(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,1)
 +18                   SET ONCOLDCD=$PIECE($GET(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,2)
 +19                   SET ONC23ACD=$PIECE($GET(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,3)
 +20                   SET ONC23BCD=$PIECE($GET(^ONCO(164,ICD,"SPS",SPSIEN,0)),U,4)
 +21                   IF ONCUSEB=0
                           IF ONC23ACD=""
                               QUIT 
 +22                   IF ONCUSEB=1
                           IF ONC23BCD=""
                               QUIT 
 +23      ;I (ONC23ACD="")&(ONC23BCD="") Q
 +24                   SET ONCDSPCD=$SELECT(ONCUSEB=1:ONC23BCD,1:ONC23ACD)
 +25                   SET CTR=CTR+1
                       IF CTR#20=0
                           DO P
                           if EX=U
                               QUIT 
 +26                   IF (ICD=67000)!(ICD=67090)!(ICD=67250)!(ICD=67569)
                           DO TRANSLT
 +27                   WRITE !?5,ONCDSPCD,?12,ONCDESC
 +28                   KILL ONCOLDCD,ONC23ACD,ONC23BCD,ONCDSPCD,ONCDESC
                       QUIT 
                   End DoDot:2
                   if EX=U
                       QUIT 
           End DoDot:1
 +29       WRITE !
 +30       KILL CTR,EX,HST14,ICD,SCDXDT,SPSIEN,TOP,XSP,ONCUSEB,ONCXVAL
 +31       QUIT 
 +32      ;
CHK24BCD  ;Check for 2024+ cases with B-codes:
 +1       ; 2024: Breast(67500),Colon(67180),Lung(67340),Pancreas(67250),Thyroid(67739)
 +2        SET ONCUSEB=0
 +3        IF ICD=67500
               IF $PIECE($GET(^ONCO(165.5,D0,0)),U,16)>3231231
                   SET ONCUSEB=1
 +4        IF ICD=67180
               IF $PIECE($GET(^ONCO(165.5,D0,0)),U,16)>3231231
                   SET ONCUSEB=1
 +5        IF ICD=67340
               IF $PIECE($GET(^ONCO(165.5,D0,0)),U,16)>3231231
                   SET ONCUSEB=1
 +6        IF ICD=67250
               IF $PIECE($GET(^ONCO(165.5,D0,0)),U,16)>3231231
                   SET ONCUSEB=1
 +7        IF ICD=67739
               IF $PIECE($GET(^ONCO(165.5,D0,0)),U,16)>3231231
                   SET ONCUSEB=1
 +8        QUIT 
 +9       ;
TRANSLT   ; Convert some 2 digit codes in description to new 4 character codes
 +1        IF ONCDESC["41"
               SET ONCDESC=$PIECE(ONCDESC,"41",1)_"A410"_$PIECE(ONCDESC,"41",2)
 +2        IF ONCDESC["42"
               SET ONCDESC=$PIECE(ONCDESC,"42",1)_"A420"_$PIECE(ONCDESC,"42",2)
 +3        IF ONCDESC["51"
               SET ONCDESC=$PIECE(ONCDESC,"51",1)_"A510"_$PIECE(ONCDESC,"51",2)
 +4        IF ONCDESC["52"
               SET ONCDESC=$PIECE(ONCDESC,"52",1)_"A520"_$PIECE(ONCDESC,"52",2)
 +5        IF ONCDESC["54"
               SET ONCDESC=$PIECE(ONCDESC,"54",1)_"A540"_$PIECE(ONCDESC,"54",2)
 +6        IF ONCDESC["61"
               SET ONCDESC=$PIECE(ONCDESC,"61",1)_"A610"_$PIECE(ONCDESC,"61",2)
 +7        IF ONCDESC["62"
               SET ONCDESC=$PIECE(ONCDESC,"62",1)_"A620"_$PIECE(ONCDESC,"62",2)
 +8        QUIT 
P          Begin DoDot:1
 +1            WRITE !
               KILL DIR
               SET DIR(0)="E"
               DO ^DIR
               IF 'Y
                   SET EX=U
                   QUIT 
           End DoDot:1
           if EX=U
               QUIT 
           WRITE !
 +2        QUIT