[613] | 1 | XLFNAME7 ;BPOIFO/KEITH - NAME STANDARDIZATION ; 27 Jan 2002 11:05 PM
|
---|
| 2 | ;;8.0;KERNEL;**343**; Jul 10, 1995;
|
---|
| 3 | ;
|
---|
| 4 | FORMAT(XUNAME,XUMINL,XUMAXL,XUNOP,XUCOMA,XUAUDIT,XUFAM,XUDNC) ;Format name value
|
---|
| 5 | ;Input: XUNAME=text value representing person name to transform
|
---|
| 6 | ; XUMINL=minimum length (optional), default 3
|
---|
| 7 | ; XUMAXL=maximum length (optional), default 30
|
---|
| 8 | ; XUNOP=1 to standardize last name for 'NOP' x-ref
|
---|
| 9 | ; (for the PAITNE file). (optional)
|
---|
| 10 | ; XUCOMA=0 to not require a comma
|
---|
| 11 | ; 1 to require a comma in the input value
|
---|
| 12 | ; 2 to add a comma if none
|
---|
| 13 | ; 3 to prohibit (remove) commas
|
---|
| 14 | ; (optional) default if not specified is 1
|
---|
| 15 | ;
|
---|
| 16 | ; XUAUDIT=variable to return audit, pass by reference (optional),
|
---|
| 17 | ; returned values:
|
---|
| 18 | ; XUAUDIT=0 if no change was made
|
---|
| 19 | ; 1 if name is changed
|
---|
| 20 | ; 2 if name could not be converted
|
---|
| 21 | ; XUAUDIT(1) defined if name contains no comma
|
---|
| 22 | ; XUAUDIT(2) defined if parenthetical text is removed
|
---|
| 23 | ; XUAUDIT(3) defined if value is unconvertible
|
---|
| 24 | ; XUAUDIT(4) defined if characters are removed or changed
|
---|
| 25 | ; XUFAM='1' if just the family name, '0' otherwise (optional)
|
---|
| 26 | ; XUDNC='1' to prevent componentization (optional)
|
---|
| 27 | ; ='2' to return components before standardize
|
---|
| 28 | ;
|
---|
| 29 | ;Output: XUNAME in specified format or null if length of transformed value is less than XUMINL
|
---|
| 30 | ;
|
---|
| 31 | N XUX,XUOX,XUOLDN,XUAX,XUI,XUNEWN
|
---|
| 32 | ;Initialize variables
|
---|
| 33 | K XUAUDIT
|
---|
| 34 | S XUOLDN=XUNAME M XUX=XUNAME
|
---|
| 35 | S XUDNC=$G(XUDNC) D COMP^XLFNAME8(.XUX,.XUDNC)
|
---|
| 36 | S XUMINL=+$G(XUMINL) S:XUMINL<1 XUMINL=3
|
---|
| 37 | S XUMAXL=+$G(XUMAXL) S:XUMAXL<XUMINL XUMAXL=30
|
---|
| 38 | S XUNOP=$S($G(XUNOP)=1:"S",1:"")
|
---|
| 39 | S:'$L($G(XUCOMA)) XUCOMA=1 S XUCOMA=+XUCOMA
|
---|
| 40 | S XUFAM=$S($G(XUFAM)=1:"F",1:"")
|
---|
| 41 | ;
|
---|
| 42 | ;Check for comma
|
---|
| 43 | I XUX'["," S XUAUDIT(1)=""
|
---|
| 44 | I XUCOMA=1,XUX'["," S XUAUDIT=2,XUAUDIT(3)="" Q ""
|
---|
| 45 | ;Clean input value
|
---|
| 46 | F Q:'$$F1^XLFNAME8(.XUX,XUCOMA)
|
---|
| 47 | I XUX'=XUOLDN S XUAUDIT(4)=""
|
---|
| 48 | ;Add comma if necessary
|
---|
| 49 | I XUCOMA=2,XUX'[" ",XUX'["," S XUX=XUX_","
|
---|
| 50 | I XUX=XUOLDN K XUAUDIT(4)
|
---|
| 51 | ;Quit if result is too short
|
---|
| 52 | I $L(XUX)<XUMINL S XUAUDIT=2,XUAUDIT(3)="" K XUNAME Q ""
|
---|
| 53 | S XUNAME=XUX I XUDNC'=1 D
|
---|
| 54 | .;Parse the name
|
---|
| 55 | .D STDNAME^XLFNAME(.XUX,XUFAM_"CP",.XUAX)
|
---|
| 56 | .I $D(XUAX("STRIP")) S XUAUDIT(2)=""
|
---|
| 57 | .I $D(XUAX("NM"))!$D(XUAX("PERIOD")) S XUAUDIT(4)=""
|
---|
| 58 | .I $D(XUAX("PUNC"))!($D(XUAX("SPACE"))&'$L(XUFAM)) S XUAUDIT(4)=""
|
---|
| 59 | .I $D(XUAX("SPACE")),$L(XUFAM),XUNAME'=$G(XUX("FAMILY")) S XUAUDIT(4)=""
|
---|
| 60 | .;Standardize the suffix
|
---|
| 61 | .S XUX("SUFFIX")=$$CLEANC^XLFNAME(XUX("SUFFIX"))
|
---|
| 62 | .;Post-clean components
|
---|
| 63 | .S XUI="" F S XUI=$O(XUX(XUI)) Q:XUI="" S XUX(XUI)=$$POSTC(XUX(XUI))
|
---|
| 64 | .;Reconstruct name from components
|
---|
| 65 | .S XUNAME=$$NAMEFMT^XLFNAME(.XUX,"F","CL"_XUMAXL_XUNOP)
|
---|
| 66 | .;Adjust name for 'do not componentize'
|
---|
| 67 | .;I XUDNC S XUNAME=XUX("FAMILY")
|
---|
| 68 | ;Return comma for single value names
|
---|
| 69 | I XUCOMA,XUCOMA'=3,XUNAME'["," S XUNAME=XUNAME_","
|
---|
| 70 | ;Check length again
|
---|
| 71 | I $L(XUNAME)<XUMINL S XUAUDIT=2,XUAUDIT(3)="" K XUNAME Q ""
|
---|
| 72 | ;Enforce minimum 2 character last name rule
|
---|
| 73 | ;I '$L(XUFAM),$L($P(XUNAME,","))<3,$P(XUNAME,",")'?2U D Q ""
|
---|
| 74 | ;.S XUAUDIT=2,XUAUDIT(3)="" K XUNAME
|
---|
| 75 | ;.Q
|
---|
| 76 | ;Remove hyphens and apostrophes for 'NOP' x-ref
|
---|
| 77 | S XUX=XUNAME I XUNOP="S" S XUNAME=$TR(XUNAME,"'-")
|
---|
| 78 | I XUNAME'=XUX S XUAUDIT(4)=""
|
---|
| 79 | I XUNAME=XUOLDN K XUAUDIT
|
---|
| 80 | S XUAUDIT=XUNAME'=XUOLDN I XUAUDIT,$D(XUAUDIT)<10 S XUAUDIT(4)=""
|
---|
| 81 | S XUNEWN=XUNAME M XUNAME=XUX S XUNAME=XUNEWN
|
---|
| 82 | ;Return components before standardization if asked to
|
---|
| 83 | I XUDNC=2 D
|
---|
| 84 | . N XUNAMEC
|
---|
| 85 | . S XUNAMEC=XUNAME
|
---|
| 86 | . I XUOLDN["`" S XUOLDN=$TR(XUOLDN,"`","'")
|
---|
| 87 | . D STDNAME^XLFNAME(.XUOLDN,"C")
|
---|
| 88 | . M XUNAME=XUOLDN
|
---|
| 89 | . S XUNAME=XUNAMEC
|
---|
| 90 | Q XUNAME
|
---|
| 91 | ;
|
---|
| 92 | POSTC(XUX) ;Post-clean components
|
---|
| 93 | ;Remove parenthesis if not removed by Kernel
|
---|
| 94 | N XUI,XUXOLD
|
---|
| 95 | S XUXOLD=XUX,XUX=$TR(XUX,"()[]{}")
|
---|
| 96 | ;Check for numbers left behind by Kernel
|
---|
| 97 | F XUI=0:1:9 S XUX=$TR(XUX,XUI)
|
---|
| 98 | I XUX'=XUXOLD S XUAUDIT(4)=""
|
---|
| 99 | Q XUX
|
---|
| 100 | ;
|
---|
| 101 | NOP(XUX) ;Produce 'NOP' x-ref value
|
---|
| 102 | ;Input: XUX=name value to evaluate
|
---|
| 103 | ;Output : Standardized name or null if the same as input value
|
---|
| 104 | N XUNEWX
|
---|
| 105 | S XUNEWX=$$FORMAT(XUX,3,30,1)
|
---|
| 106 | Q $S(XUX=XUNEWX:"",1:XUNEWX)
|
---|
| 107 | ;
|
---|
| 108 | NARY(XU20NAME) ;Set up name array
|
---|
| 109 | ;Input: XU20NAME=full name value
|
---|
| 110 | ; XU20NAME(component_names)=corresponding value--if undefined,
|
---|
| 111 | ; these will get set up
|
---|
| 112 | ;
|
---|
| 113 | N XUX M XUX=XU20NAME
|
---|
| 114 | D STDNAME^XLFNAME(.XU20NAME,"FC")
|
---|
| 115 | M XU20NAME=XUX
|
---|
| 116 | S XU20NAME("NOTES")=$$NOTES^XLFNAME8()
|
---|
| 117 | Q
|
---|
| 118 | ;
|
---|