@@ -116,14 +116,43 @@ export class BulkImportStore {
116116 "Encounter.year" : {
117117 required : true ,
118118 validate : ( val ) => {
119- const FORMATS = [
120- "YYYY" ,
121- "YYYY-MM" ,
122- "YYYY-MM-DD" ,
123- "YYYY-MM-DDTHH" ,
124- "YYYY-MM-DDTHH:mm" ,
125- ] ;
126- const parsed = dayjs ( val , FORMATS , true ) ;
119+ if ( val == null ) return false ;
120+ const FLEXIBLE_DATE_RE =
121+ / ^ ( \d { 4 } ) (?: - ( \d { 1 , 2 } ) (?: - ( \d { 1 , 2 } ) (?: T ( \d { 1 , 2 } ) (?: : ( \d { 1 , 2 } ) ) ? ) ? ) ? ) ? $ / ;
122+
123+ const str = String ( val ) . trim ( ) ;
124+ if ( ! str ) return false ;
125+
126+ const m = str . match ( FLEXIBLE_DATE_RE ) ;
127+ if ( ! m ) {
128+ return false ;
129+ }
130+
131+ const [ , year , month , day , hour , minute ] = m ;
132+
133+ let normalized = year ;
134+ let format = "YYYY" ;
135+
136+ if ( month !== undefined ) {
137+ normalized += "-" + month . padStart ( 2 , "0" ) ;
138+ format += "-MM" ;
139+ }
140+
141+ if ( day !== undefined ) {
142+ normalized += "-" + day . padStart ( 2 , "0" ) ;
143+ format += "-DD" ;
144+ }
145+
146+ if ( hour !== undefined ) {
147+ normalized += "T" + hour . padStart ( 2 , "0" ) ;
148+ format += "[T]HH" ;
149+ }
150+
151+ if ( minute !== undefined ) {
152+ normalized += ":" + minute . padStart ( 2 , "0" ) ;
153+ format += ":mm" ;
154+ }
155+ const parsed = dayjs ( normalized , format , true ) ;
127156 return parsed . isValid ( ) && ! parsed . isAfter ( dayjs ( ) ) ;
128157 } ,
129158 message : "BULKIMPORT_ERROR_INVALID_DATEFORMAT" ,
0 commit comments