Пример #1
0
 public override string Convert(int value, object parameter)
 {
     return(DateUtil.ReceiptDateToShowDate(value, this.WithoutDay));
 }
Пример #2
0
        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() + ";" + 文字データの表示(文字データ));
            }
        }