private void InitializeMasterConverter(MasterVersion masterVersion) { 傷病名Converter.Instance.傷病名Dict = this.Read傷病名(masterVersion); 傷病名Converter.Instance.修飾語Dict = this.Read修飾語(masterVersion); コメントConverter.Instance.コメントDict = this.Readコメント(masterVersion); var 診療行為List = this.Read診療行為(masterVersion); DictConverter.診療行為Instance((int)masterVersion).Dict = 診療行為List.ToDictionary(x => x.Id, x => x.称); DictConverter.診療行為単位Instance.Dict = 診療行為List.ToDictionary(x => x.Id, x => x.単位); var 医薬品List = this.Read医薬品(masterVersion); DictConverter.医薬品Instance((int)masterVersion).Dict = 医薬品List.ToDictionary(x => x.Id, x => x.称); DictConverter.医薬品単位Instance.Dict = 医薬品List.ToDictionary(x => x.Id, x => x.単位); var 特定器材List = this.Read特定器材(masterVersion); DictConverter.特定器材Instance((int)masterVersion).Dict = 特定器材List.ToDictionary(x => x.Id, x => x.称); DictConverter.特定器材単位Instance.Dict = 特定器材List.ToDictionary(x => x.Id, x => x.単位); }
public override string Convert(int 診療年月, string レコード識別情報, object 内容, object parameter) { if (レコード識別情報 == レコード識別情報定数.診療行為) { return(DictConverter.診療行為Instance(診療年月).Convert((int)内容, parameter)); } else if (レコード識別情報 == レコード識別情報定数.医薬品) { return(DictConverter.医薬品Instance(診療年月).Convert((int)内容, parameter)); } else if (レコード識別情報 == レコード識別情報定数.特定器材) { return(DictConverter.特定器材Instance(診療年月).Convert((int)内容, parameter)); } else if (レコード識別情報 == レコード識別情報定数.コメント) { var tuple = (Tuple <int, string>)内容; return(コメントConverter.Instance.Convert(tuple.Item1, tuple.Item2, parameter)); } else { return(string.Empty); } }
public override string Convert(int コメントコード, string 文字データ, object parameter) { var x = this.Find(コメントコード); // TODO: コメントパターンについては10/20/30/40/90以外の資料が見当たらない。 // 他のコメントパターンはとりあえず↓のorcaの資料を参考にして作っている。 // https://ftp.orca.med.or.jp/pub/data/receipt/outline/update/improvement/pdf/2020comment-2020-06-30.pdf // 自由入力の文字データを定型コメント文と区別するために表示を変える。 Func <string, string> 文字データの表示 = s => string.Format("※{0}", s); if (x.パターン == 10) { // 10: 症状の説明等、任意の文字列情報を記録する。 return(文字データの表示(文字データ)); } else if (x.パターン == 20) { // 20: 定型のコメント文を設定する。 return(x.漢字名称); } else if (x.パターン == 30) { // 30: 定型のコメント文に、一部の文字列情報を記録する。 // return(x.漢字名称 + 文字データの表示(文字データ)); } else if (x.パターン == 31) { // 31: 定型のコメント文に、診療行為を記載する。 var 診療行為名 = string.Empty; if (int.TryParse(StringUtil.ZenToHan(文字データ), out int 診療行為コード)) { // TODO: マスターバージョン指定が必要。面倒なので最新版。 診療行為名 = DictConverter.診療行為Instance(99999).Convert(診療行為コード, null); } if (string.IsNullOrEmpty(診療行為名)) { return(x.漢字名称 + ";" + 文字データの表示(文字データ)); // 妥協して元の文字列を返す。 } else { return(x.漢字名称 + ";" + 診療行為名); } } else if (x.パターン == 40) { // 40: 定型のコメント文に、一部の数字情報を記録する。 var result = x.漢字名称; var tmp文字データ = 文字データ; foreach (var カラム位置桁数 in x.カラム位置桁数) { var 文字足りない = カラム位置桁数.Item2 - tmp文字データ.Length; if (0 < 文字足りない) { // 桁数分ゼロ埋めまたは空白埋めしていないレセコン対策 // コメントマスターは全角なので、全角スペースで問題ない。 tmp文字データ = new string(' ', 文字足りない) + tmp文字データ; } var rep = tmp文字データ.Substring(0, カラム位置桁数.Item2); var idxカラム位置 = カラム位置桁数.Item1 - 1; result = result.Substring(0, idxカラム位置) + rep + result.Substring(idxカラム位置 + カラム位置桁数.Item2); // 置き換えが済んだ文字データは削除しておく。 tmp文字データ = tmp文字データ.Substring(カラム位置桁数.Item2); } return(result); } else if (x.パターン == 42) { // 42: 定型のコメント文に、実施回数や検査値など数値を記載する。 // 30との違いは、30は定型文に「;」が既についている模様。 return(x.漢字名称 + ";" + 文字データの表示(文字データ)); } else if (x.パターン == 50) { // 50: コメント内容に年月日を記載する。 var split = StringUtil.ZenToHan(文字データ).Split(new char[] { ' ', ' ', }, StringSplitOptions.RemoveEmptyEntries); if (split.Length == 1) { if (int.TryParse(split[0], out int ymd)) { var showDate = DateUtil.ReceiptDateToShowDate(ymd); if (!string.IsNullOrEmpty(showDate)) { return(x.漢字名称 + ";" + showDate); } } } else if (split.Length == 3) { if (int.TryParse(split[0], out int y) && int.TryParse(split[1], out int m) && int.TryParse(split[2], out int d)) { var ymd = (y * 10000) + (m * 100) + d; var showDate = DateUtil.ReceiptDateToShowDate(ymd); if (!string.IsNullOrEmpty(showDate)) { return(x.漢字名称 + ";" + showDate); } } } return(x.漢字名称 + ";" + 文字データの表示(文字データ)); } else if (x.パターン == 51) { // 51: コメント内容に時刻を記載する。 var split = StringUtil.ZenToHan(文字データ).Split(new char[] { ' ', ' ', }, StringSplitOptions.RemoveEmptyEntries); if (split.Length == 2) { if (int.TryParse(split[0], out int h) && int.TryParse(split[1], out int m)) { var time = string.Format("{0}時{1}分", h, m); return(x.漢字名称 + ";" + time); } } return(x.漢字名称 + ";" + 文字データの表示(文字データ)); } else if (x.パターン == 52) { // 52: コメント内容に時間(分単位)を記載する。 if (int.TryParse(StringUtil.ZenToHan(文字データ), out int m)) { return(x.漢字名称 + ";" + m + "分"); } else { return(x.漢字名称 + ";" + 文字データの表示(文字データ)); } } else if (x.パターン == 90) { // 90: 処置、手術及び画像診断等を行った部位を、修飾語(部位)コードを使用して記録する。 return("(未実装)" + 文字データの表示(文字データ)); } else { return(コメントコード.ToString() + ";" + 文字データの表示(文字データ)); } }