Class: ODDB::AnalysisParse::TestIndexFinder

Inherits:
Test::Unit::TestCase
  • Object
show all
Defined in:
ext/analysisparse/test/test_pagehandler.rb

Instance Method Summary (collapse)

Instance Method Details

- (Object) setup



14
15
16
17
18
19
# File 'ext/analysisparse/test/test_pagehandler.rb', line 14

def setup
  @index = {}
  @handler = IndexFinder.new
  @index_handler = IndexHandler.new(@index)
  @parser = FragmentedPageHandler.new
end

- (Object) test_fr_index_finder__1



555
556
557
558
559
560
561
562
563
564
565
566
567
# File 'ext/analysisparse/test/test_pagehandler.rb', line 555

def test_fr_index_finder__1
  src = "Liste syst\351matique des analyses et annexes\n\nChapitre 1: Chimie / H\351matologie / Immunologie....................41\nChapitre 2: G\351n\351tique\n2.1 Remarques.................75\n2.2 Liste des analyses..................76\n2.2.1 Analyses des chromosomes.....................76\nChapitre 3: Microbiologie\n3.1 Virologie...................85\n3.2 Bact\351riologie / mycologie\nChapitre 4: Autres\n4.1 Positions g\351n\351rales...............109\n"
  begin
    result = @handler.next_pagehandler(src)
  end
  expected = {
    41 =>  'Chimie/Hématologie/Immunologie',
    75 =>  'Génétique',
    85 =>  'Microbiologie',
    109  => 'Positions générales',
  }
  assert_equal(expected, result.index)
end

- (Object) test_fr_index_finder__2



582
583
584
585
586
587
588
589
590
591
592
593
# File 'ext/analysisparse/test/test_pagehandler.rb', line 582

def test_fr_index_finder__2
  src = "5.1 Annexe A: Analyses effectu\351es dans le cadre des soins de base\n5.1.1 Consid\351rations g\351n\351rales......................123\n5.1.2 Laboratoire de cabinet m\351dical...........124\n5.2 Annexe B: Analyses prescrites par des chiropraticiens.........139\n5.3 Annexe C: Analyses prescrites par des sages-femmes....141\n\nListe alphab\351tique des analyses (avec synonymes)...143\n"
  begin
    result = @handler.next_pagehandler(src)
  end
  expected = {
  123 =>  'Analyses effectuées dans le cadre des soins de base',
  139 =>  'Analyses prescrites par des chiropraticiens',
  141 =>  'Analyses prescrites par des sages-femmes',
  }
  assert_equal(expected, result.index)
end

- (Object) test_fr_index_finder__3



603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
# File 'ext/analysisparse/test/test_pagehandler.rb', line 603

def test_fr_index_finder__3
  src = "\nTable des mati\350res\n\nRemarques pr\351liminaires\n\n1. Bases l\351gales..............................................................................5\n1.1  Extraits de la loi f\351d\351rale du 18 mars 1994 sur\nl~Rassurance-maladie (LAMal)...............................................5\n1.2  Extraits de l~Rordonnance du 27 juin 1995 sur\nl~Rassurance-maladie (OAMal).............................................13\n1.3  Extraits de l~Rordonnance du 29 septembre 1995\nsur les prestations dans l~Rassurance obligatoire des\nsoins en cas de maladie (OPAS).......................................20\n2.  Commentaires des dispositions particuli\350res de la LAMal,\nde l'OAMal et de l'OPAS...........................................................24\n2.1  Conditions g\351n\351rales d~Radmission pour les laboratoires....24\n2.2  Conditions d~Radmission particuli\350res pour les diff\351rents\ntypes de laboratoires..........................................................25\n2.2.1 Laboratoires autoris\351s \340 effectuer uniquement\ndes analyses des soins de base..............................25\n2.2.2 Laboratoires autoris\351s \340 effectuer d~Rautres ana-\nlyses en plus des analyses des soins de base........25\n2.2.3 Laboratoires autoris\351s \340 effectuer des analyses\ndu chapitre G\351n\351tique de la liste des analyses........26\n2.2.4 Laboratoires autoris\351s \340 effectuer des analyses\ndu chapitre Microbiologie de la liste des analyses...27\n2.2.5 Laboratoires sp\351ciaux..............................................28\n2.3  Annexes \340 la liste des analyses.........................................28\n2.4  La garantie de la qualit\351, condition de remboursement.....29\n2.5  Analyses de laboratoire effectu\351es \340 l~R\351tranger.................30\n2.6  Interm\351diaires des analyses de laboratoire.......................31\n2.7  Facturation.........................................................................31\n2.8  Contr\364le de la prescription des analyses...........................32\n2.9  Communication des renseignements.................................32\n3.  Dispositifs m\351dicaux pour le diagnostic in vitro (DIV)...............33\n4. Demandes de modifications de la liste des analyses................33\n5. Tarif ...........................................................................................35\n6.                    Syst\351matique des num\351ros de position dans la liste des\nanalyses ....................................................................................37\n7. Abr\351viations..............................................................................37\n8. Remarques concernant la pr\351sente \351dition..............................39\nChapitre 1:  Chimie / H\351matologie / Immunologie..........................41\n\nChapitre 2:  G\351n\351tique\n2.1                                       Remarques..........................................................................75\n2.2  Liste des analyses...............................................................76\n2.2.1  Analyses des chromosomes.....................................76\n2.2.2 Analyses mol\351culaires..............................................78\n\nChapitre 3:  Microbiologie\n3.1                                       Virologie...............................................................................85\n3.2  Bact\351riologie / mycologie.....................................................97\n3.2.1 Remarques...............................................................97\n3.2.2  Liste des analyses....................................................97\n3.3 Parasitologie......................................................................106\n\nChapitre 4:  Autres\n4.1                                       Positions g\351n\351rales...........................................................109\n4.2 Positions anonymes...........................................................111\n4.3 Blocs d\\'analyses fixes........................................................120\n4.4  Liste des auto-anticorps rares...........................................121\n\nChapitre 5:  Annexes \340 la liste des analyses................................123\n5.1 Annexe A: Analyses effectu\351es dans le cadre des\nsoins de base\n5.1.1 Consid\351rations g\351n\351rales.......................................123\n5.1.2  Laboratoire de cabinet m\351dical...............................124\n5.1.2.1 D\351finition des \"analyses dans le cadre des\nsoins de base\" pour le laboratoire de\ncabinet m\351dical................................................124\n5.1.2.2 D\351finition: \"laboratoire de cabinet m\351dical\".....124\n5.1.2.3 D\351finition: \"diagnostic en pr\351sence du\npatient\".............................................................125\n5.1.3  Analyses dans le cadre des soins de base\nau sens strict...........................................................127\n5.1.4  Liste \351largie pour les m\351decins sp\351cialistes...........132\n5.2 Annexe B:  Analyses prescrites par des chiropraticiens....139\n5.3 Annexe C:  Analyses prescrites par des sages-femmes...141\n\nListe alphab\351tique des analyses (avec synonymes).........143\n\n"
  begin
    result = @handler.next_pagehandler(src)
  end
  expected = {
  5   => 'Bases légales',
  24  => 'Commentaires des dispositions particulières de la LAMal, de l\'OAMal et de l\'OPAS',
  33  => 'Demandes de modifications de la liste des analyses',
  35  => 'Tarif',
  37  => 'Abréviations',
  39  => 'Remarques concernant la présente édition',
  41  => 'Chimie/Hématologie/Immunologie',
  75  => 'Génétique',
  85  => 'Microbiologie',
  109 =>  'Positions générales',
  111 =>  'Positions anonymes',
  120 =>  'Blocs d\'analyses fixes',
  121 =>  'Liste des auto-anticorps rares',
  123 =>  'Analyses effectuées dans le cadre des soins de base',
  139 =>  'Analyses prescrites par des chiropraticiens',
  141 =>  'Analyses prescrites par des sages-femmes',
  }
  assert_equal(expected, result.index)
end

- (Object) test_fr_index_finder__4



711
712
713
714
715
716
717
718
719
720
721
722
# File 'ext/analysisparse/test/test_pagehandler.rb', line 711

def test_fr_index_finder__4
  src = "Chapitre 4: Autres\n4.1                                       Positions g\351n\351rales.................................109\n4.2 Positions anonymes..........................................................111\n4.3 Blocs d~Ranalyses fixes..............................................................120\n"
  begin
    result = @handler.next_pagehandler(src) 
  end
  expected = {
    109  => 'Positions générales',
    111  => 'Positions anonymes',
    120  => 'Blocs d\'analyses fixes',
  }
  assert_equal(expected, result.index)
end

- (Object) test_fr_index_finder__5



729
730
731
732
733
734
735
736
737
738
739
# File 'ext/analysisparse/test/test_pagehandler.rb', line 729

def test_fr_index_finder__5
  src = "4.3 Blocs d'analyses fixes........................................................120\n4.4 Liste des auto-anticorps rares...........................................121\n"
  begin
    result = @handler.next_pagehandler(src)
  end
  expected = {
    120  => 'Blocs d\'analyses fixes',
    121  => 'Liste des auto-anticorps rares',
  }
  assert_equal(expected, result.index)
end

- (Object) test_fr_parse_page__1



971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
# File 'ext/analysisparse/test/test_pagehandler.rb', line 971

def test_fr_parse_page__1
  page_1 = "Allergologie et immunologie clinique\nR\351v. No pos. A TP D\351nomination (liste allergologie et immunologie clin.)\n8317.00 35 Immunoglobuline IgE totale, qn\n\nDermatologie et v\351n\351rologie\n8306.01 35 Test de gonflement hyposmotique (spermatozo\357des)\n\nEndocrinologie - diab\351tologie\n8149.00 9 Calcium total (sang, plasma, s\351rum)\n\nGastro-ent\351rologie\n9366.00 15 Ur\351ase, test \340 l'~ (Helicobacter pylori)\n\nGyn\351cologie et obst\351trique\n8455.20 60 P\351n\351tration, test de ~\n\nH\351matologie\nC 8000.00 8 ABO/D, contr\364le selon les recommandations STS CRS \"S\351rologie \351rythrocytaire chez le patient\"\n\nM\351decine physique et r\351adaptation\n8388.00 20 Cristaux, recherche en lumi\350re polaris\351e\n\nM\351decine tropicale\n9356.30 25 Microscopie sp\351ciale, examen par ~ (orange acridine, Ziehl-Neelsen, auramin-rhodamine, y compris sur fond noir, contraste de phase, etc., KOH, recherche de champignons)\n\nP\351diatrie\n8543.00 40 Th\351ophylline (sang)\n\nRhumatologie\n8388.01 20 Cristaux, recherche en lumi\350re polaris\351e\n134\n"
  page_2 = "8600.00 25 Cellules, num\351ration et diff\351rentiation apr\350s enrichissement et coloration de liquides biologiques\n\n8006.00 9 Alanine-aminotransf\351rase (ALAT)\n135\n"
  begin
    res = @index_handler.parse_page(page_1, 134, @parser)
    res2 = @index_handler.parse_page(page_2, 135, @parser)
  end
  expected = [
    {
    :code                  => '8317.00',  
    :group               => '8317',
    :position              => '00',
    :taxpoints           => 35,
    :description         =>  'Immunoglobuline IgE totale, qn',
    :list_title            =>  nil,
    :permissions         =>  [['Allergologie et immunologie clinique', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8306.01',  
    :group               => '8306',
    :position              => '01',
    :taxpoints           => 35,
    :description         =>  'Test de gonflement hyposmotique (spermatozoïdes)',
    :list_title            =>  nil,
    :permissions         =>  [['Dermatologie et vénérologie', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8149.00',  
    :group               => '8149',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Calcium total (sang, plasma, sérum)',
    :list_title            =>  nil,
    :permissions         =>  [['Endocrinologie - diabétologie', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '9366.00',  
    :group               => '9366',
    :position              => '00',
    :taxpoints           => 15,
    :description         =>  'Uréase, test à l\'~ (Helicobacter pylori)',
    :list_title            =>  nil,
    :permissions         =>  [['Gastro-entérologie', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8455.20',  
    :group               => '8455',
    :position              => '20',
    :taxpoints           => 60,
    :description         =>  'Pénétration, test de ~',
    :list_title            =>  nil,
    :permissions         =>  [['Gynécologie et obstétrique', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8000.00',  
    :group               => '8000',
    :position              => '00',
    :analysis_revision   => 'C',
    :taxpoints           => 8,
    :description         =>  'ABO/D, contrôle selon les recommandations STS CRS "Sérologie érythrocytaire chez le patient"',
    :list_title            =>  nil,
    :permissions         =>  [['Hématologie', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8388.00',  
    :group               => '8388',
    :position              => '00',
    :taxpoints           => 20,
    :description         =>  'Cristaux, recherche en lumière polarisée',
    :list_title            =>  nil,
    :permissions         =>  [['Médecine physique et réadaptation', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '9356.30',  
    :group               => '9356',
    :position              => '30',
    :taxpoints           => 25,
    :description         =>  'Microscopie spéciale, examen par ~ (orange acridine, Ziehl-Neelsen, auramin-rhodamine, y compris sur fond noir, contraste de phase, etc., KOH, recherche de champignons)',
    :list_title            =>  nil,
    :permissions         =>  [['Médecine tropicale', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8543.00',  
    :group               => '8543',
    :position              => '00',
    :taxpoints           => 40,
    :description         =>  'Théophylline (sang)',
    :list_title            =>  nil,
    :permissions         =>  [['Pédiatrie', nil]],
    :taxpoint_type       => nil,
  },
    {
    :code                  => '8388.01',  
    :group               => '8388',
    :position              => '01',
    :taxpoints           => 20,
    :description         =>  'Cristaux, recherche en lumière polarisée',
    :list_title            =>  nil,
    :permissions         =>  [['Rhumatologie', nil]],
    :taxpoint_type       => nil,
  }
  ]
  expected_2 = [
    {
    :code            =>  '8600.00',
    :group         =>  '8600',
    :position        =>  '00',
    :taxpoints     =>  25,
    :taxpoint_type =>  nil,
    :list_title      => nil,
    :permissions   => [['Rhumatologie', nil]],
    :description   => 'Cellules, numération et différentiation après enrichissement et coloration de liquides biologiques',
  },
    {
    :code            =>  '8006.00',
    :group         =>  '8006',
    :position        =>  '00',
    :description   => 'Alanine-aminotransférase (ALAT)',
    :taxpoints     =>  9,
    :taxpoint_type =>  nil,
    :list_title      => nil,
    :permissions   => [['Rhumatologie', nil]]
    },
  ]
#       assert_equal(expected, res)
  assert_equal(expected_2, res2)
end

- (Object) test_fr_parse_page__2



1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
# File 'ext/analysisparse/test/test_pagehandler.rb', line 1145

def test_fr_parse_page__2
  src = "Analyses prescrites par des chiropraticiens\n(art. 62 1er al. let. b OAMal)\n\nListe des analyses\nR\351v. No pos. A TP D\351nomination (list chiropraticiens)\n8006.001 9 Alanine-aminotransf\351rase (ALAT)\n8012.00 9 Phosphatase alcaline\n8013.01 60 Phosphatase alcaline, osseuse\n1 test restriction\n139\n"
  begin
    result = @index_handler.parse_page(src, 139, @parser)
  end
  expected = [
    {
      :code           => '8006.00',
      :group          => '8006',
      :position       => '00',
      :description    =>  'Alanine-aminotransférase (ALAT)',
      :permissions    =>  [],
      :list_title     =>  nil,
      :taxpoint_type  => nil,
      :taxpoints      => 9,
  },
    {
      :code           => '8012.00',
      :group          => '8012',
      :position       => '00',
      :description    =>  'Phosphatase alcaline',
      :permissions    =>  [],
      :list_title     =>  nil,
      :taxpoint_type  => nil,
      :taxpoints      => 9,
  },
    {
      :code           => '8013.01',
      :group          => '8013',
      :position       => '01',
      :description    =>  'Phosphatase alcaline, osseuse',
      :permissions    =>  [],
      :list_title     =>  nil,
      :taxpoint_type  => nil,
      :taxpoints      => 60,
  },
  ]
  assert_equal(expected, result)
end

- (Object) test_fr_parse_pages__1



744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
# File 'ext/analysisparse/test/test_pagehandler.rb', line 744

def test_fr_parse_pages__1
  page_1 = "Liste partielle 2\n\nPour les analyses suivantes, le tarif de la liste des analyses (valeur\ndu point et nombre de points) s'applique \351galement aux laboratoires\nde cabinets m\351dicaux.\n\nR\351v.    No pos.     A   TP     D\351nomination (liste des soins de base, liste partielle 2)\n\nC     8000.00 1       8  ABO/D, contr\364le selon les recommandations\nSTS CRS \"S\351rologie \351rythrocytaire chez le\npatient\"\n8006.00          9 Alanine-aminotransf\351rase (ALAT)\n8007.00          9 Albumine, chimique\n8008.50         12 Albumine urinaire, sq\n8012.00          9 Phosphatase alcaline\n8036.00 2      16   Amph \351tamines, ql (urine) (screening avec\nd'autres drogues: cf. 8535.04/05)\n130\n"
  page_2 = "R\351v.    No pos.     A   TP     D\351nomination (liste des soins de base, liste partielle 2)\n\nC     8560.00          9 Thrombocytes, num\351ration, d\351termination\nmanuelle, cumulable avec 8210.00\n\351rythrocytes (num\351ration), 8273.00\nh\351matocrite, 8275.00 h\351moglobine et\n8406.00 leucocytes (num\351ration), jusqu'\340\nun total de max. 15 points (h\351mogramme\nII)\nLimitation: pas avec la m\351thode QBC\nN     8560.10          6    Examens h\351matologiques avec m\351thode\nQBC\nLimitation: uniquement pour h\351moglobine et\nh\351matocrite. Valable du 1.1.2006 au 31.12.2006\n8572.00          9 Triglyc\351rides\n8574.11         16   Troponine (T ou I), test rapide, non cumula-\nble avec 8384.00 Cr\351atine-kinase (CK),\ntotal\n8578.00          9 Urate\nC     8587.00       25   Test de compatibilit\351: compatibilit\351 crois\351e,\npar concentr\351 \351rythrocitaire, selon les\nrecommandations STS CRS \"S\351rologie\n\351rythrocytaire chez le patient\"\n9116.40    *  12   HIV 1 + 2, d\351pistage des anticorps (par test\nrapide), ql\nS     9710.00          8    Pr\351l\350vement de sang capillaire ou de sang\nveineux, uniquement pour les laboratoires\nde cabinets m\351dicaux dans le cadre d'un\ndiagnostic en pr\351sence du patient au sens\nde l'art. 54, al. 1, lt. a, OAMal et du chapitre\n5.1.2 de la liste des analyses\nLimitation: valable du 1.5.2004 au 31.12.2005\n\n______________________________________________    __________________\n* position anonyme\n1 seulement pour h\364pitaux\n2 seulement pour les personnes m\351dicales autoris\351es, dans le cadre de traitements de\nsubstitution ou de sevrage de leurs propres patients\n3 seulement pour h\364pitaux et pneumologues\n4 seulement pour h\364pitaux, pneumologues et h\351matologues\n131\n\n"
  begin
    res1 = @index_handler.parse_page(page_1, 130, @parser)
    res2 = @index_handler.parse_page(page_2, 131, @parser)
  end
  expected_res1 = [
    {
    :code                  => '8000.00',  
    :analysis_revision   => 'C',
    :group               => '8000',
    :position              => '00',
    :taxpoints           => 8,
    :description         =>  'ABO/D, contrôle selon les recommandations STS CRS "Sérologie érythrocytaire chez le patient"',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', 'seulement pour hôpitaux']],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8006.00',  
    :group               => '8006',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Alanine-aminotransférase (ALAT)',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8007.00',  
    :group               => '8007',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Albumine, chimique',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8008.50',  
    :group               => '8008',
    :position              => '50',
    :taxpoints           => 12,
    :description         =>  'Albumine urinaire, sq',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8012.00',  
    :group               => '8012',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Phosphatase alcaline',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8036.00',  
    :group               => '8036',
    :position              => '00',
    :taxpoints           => 16,
    :description         =>  'Amph étamines, ql (urine) (screening avec d\'autres drogues: cf. 8535.04/05)',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', 'seulement pour les personnes médicales autorisées, dans le cadre de traitements de substitution ou de sevrage de leurs propres patients']],
    :taxpoint_type       => :default,
  },
  ]
  expected_res2 = [
    {
    :code                  => '8560.00',  
    :group               => '8560',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Thrombocytes, numération, détermination manuelle, cumulable avec 8210.00 érythrocytes (numération), 8273.00 hématocrite, 8275.00 hémoglobine et 8406.00 leucocytes (numération), jusqu\'à un total de max. 15 points (hémogramme II)',
    :limitation            =>  'pas avec la méthode QBC',
    :analysis_revision   => 'C',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8560.10',  
    :group               => '8560',
    :position              => '10',
    :taxpoints           => 6,
    :description         =>  'Examens hématologiques avec méthode QBC',
    :analysis_revision   => 'N',
    :limitation            =>  'uniquement pour hémoglobine et hématocrite. Valable du 1.1.2006 au 31.12.2006',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8572.00',  
    :group               => '8572',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Triglycérides',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8574.11',  
    :group               => '8574',
    :position              => '11',
    :taxpoints           => 16,
    :description         =>  'Troponine (T ou I), test rapide, non cumulable avec 8384.00 Créatine-kinase (CK), total',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8578.00',  
    :group               => '8578',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Urate',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '8587.00',  
    :group               => '8587',
    :position              => '00',
    :taxpoints           => 25,
    :description         =>  'Test de compatibilité: compatibilité croisée, par concentré érythrocitaire, selon les recommandations STS CRS "Sérologie érythrocytaire chez le patient"',
    :analysis_revision   => 'C',
    :list_title            =>  nil,
    :permissions         =>  [['Liste partielle 2', 'seulement pour hôpitaux']],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '9116.40',  
    :group               => '9116',
    :position              => '40',
    :taxpoints           => 12,
    :description         =>  'HIV 1 + 2, dépistage des anticorps (par test rapide), ql',
    :list_title            =>  nil,
    :anonymous           => true,
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
    {
    :code                  => '9710.00',  
    :group               => '9710',
    :position              => '00',
    :taxpoints           => 8,
    :description         =>  'Prélèvement de sang capillaire ou de sang veineux, uniquement pour les laboratoires de cabinets médicaux dans le cadre d\'un diagnostic en présence du patient au sens de l\'art. 54, al. 1, lt. a, OAMal et du chapitre 5.1.2 de la liste des analyses',
    :limitation            =>  'valable du 1.5.2004 au 31.12.2005',
    :list_title            =>  nil,
    :analysis_revision   => 'S',
    :permissions         =>  [['Liste partielle 2', nil]],
    :taxpoint_type       => :default,
  },
  ]
  assert_equal(expected_res1.at(5), res1.at(5))
    #   assert_equal(expected_res2, res2)
end

- (Object) test_index_finder__1



21
22
23
24
25
26
27
28
29
30
31
# File 'ext/analysisparse/test/test_pagehandler.rb', line 21

def test_index_finder__1
  src = "Systematische Auflistung der Analysen inkl. Anh\344nge\n1. Kapitel: Chemie/H\344matologie/Immunologie............................. 41\n"
  begin
    result = @handler.next_pagehandler(src)
    assert_kind_of(IndexFinder, result)
    expected = {
      41  => 'Chemie/Hämatologie/Immunologie'
    }
    assert_equal(expected, result.index)
  end
end

- (Object) test_index_finder__2



36
37
38
39
40
41
42
43
44
45
46
47
# File 'ext/analysisparse/test/test_pagehandler.rb', line 36

def test_index_finder__2
  src = "Systematische Auflistung der Analysen inkl. Anh\344nge\n1. Kapitel: Chemie/H\\uffffmatologie/Immunologie............................. 41\n2. Kapitel: Genetik\n2.1 Bemerkungen........................................................................ 75\n"
  begin
    result = @handler.next_pagehandler(src)
    assert_kind_of(IndexFinder, result)
    expected = {
      75  => 'Genetik',
      41  => 'Chemie/Huffffmatologie/Immunologie'
    }
    assert_equal(expected, result.index)
  end
end

- (Object) test_index_finder__3



54
55
56
57
58
59
60
61
62
63
64
65
# File 'ext/analysisparse/test/test_pagehandler.rb', line 54

def test_index_finder__3
  src = "Inhalts\374bersicht\nVorbemerkungen\n1. Rechtsgrundlagen ....................................................................... 5\n1.1 Auszug aus dem Bundesgesetz vom 18. M\344rz 1994\n\374ber die Krankenversicherung (KVG) .................................. 5\n1.2 Auszug aus der Verordnung \374ber die\nKrankenversicherung vom 27. Juni 1995 (KVV) ................ 13\n1.3 Auszug aus der Krankenpflege-Leistungsverordnung\n(KLV) vom 29. September 1995 ........................................ 20\n2. Erl\344uterungen zu einzelnen Bestimmungen des KVG sowie\nder KVV und der KLV................................................................ 24\n"
  begin
    result = @handler.next_pagehandler(src)
    assert_kind_of(IndexFinder, result)
    expected = {
      24  => 'Erläuterungen zu einzelnen Bestimmungen des KVG sowie der KVV und der KLV',
      5   => 'Rechtsgrundlagen'
    }
    assert_equal(expected, result.index)
  end
end

- (Object) test_index_finder__4



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'ext/analysisparse/test/test_pagehandler.rb', line 79

def test_index_finder__4
  src = "Analysenliste\nAnhang 3 der Krankenpflege-Leistungsverordnung (KLV) vom\n29. September 1995\nListe der von den Krankenversicherern im Rahmen der\nobligatorischen Krankenpflegeversicherung als Pflichtleistung zu\nverg\374tenden Analysen\nFassung vom 1. Januar 2006\nDie vorliegende Analysenliste ersetzt diejenige vom 1. Januar 2005\nHerausgegeben vom Eidgen\366ssischen Departement des Innern\nVertrieb:\nBundesamt f\374r Bauten und Logistik BBL, Vertrieb Publikationen,\n3003 Bern, Fax 031 325 50 58\n(Bestell-Nr. 316.935 d)\nhttp://www.bbl.admin.ch/internet/produkte_und_dienstleistungen/online_shop/alle/index\n.html?lang=de (Sucheingabe: Analysenliste)\nDie Analysenliste ist auch auf der Webseite des Bundesamtes f\374r Gesundheit unter\nhttp://www.bag.admin.ch/kv/gesetze/d/index.htm ver\366ffentlicht.\n\n3\nInhalts\374bersicht\nVorbemerkungen\n1. Rechtsgrundlagen ....................................................................... 5\n1.1 Auszug aus dem Bundesgesetz vom 18. M\344rz 1994\n\374ber die Krankenversicherung (KVG) .................................. 5\n1.2 Auszug aus der Verordnung \374ber die\nKrankenversicherung vom 27. Juni 1995 (KVV) ................ 13\n1.3 Auszug aus der Krankenpflege-Leistungsverordnung\n(KLV) vom 29. September 1995 ........................................ 20\n2. Erl\344uterungen zu einzelnen Bestimmungen des KVG sowie\nder KVV und der KLV................................................................ 24\n2.1 Allgemeine Zulassungsbedingungen f\374r Laboratorien....... 24\n2.2 Spezielle Zulassungsbedingungen f\374r die\nverschiedenen Laboratoriumstypen................................... 25\n2.2.1 Laboratorien, die nur Analysen der Grundversorgung\ndurchf\374hren d\374rfen ................................ 25\n2.2.2 Laboratorien, die ausser den Analysen der\nGrundversorgung weitere Analysen durchf\374hren\nd\374rfen........................................................................ 25\n2.2.3 Laboratorien, die Analysen des Kapitels Genetik\nder Analysenliste durchf\374hren d\374rfen ....................... 26\n2.2.4 Laboratorien, die Analysen des Kapitels Mikrobiologie\nder Analysenliste durchf\374hren d\374rfen.......... 27\n2.2.5 Speziallaboratorien ................................................... 27\n2.3 Anh\344nge zur Analysenliste ................................................ 28\n2.4 Qualit\344tssicherung als Voraussetzung der Verg\374tung....... 29\n2.5 Durchf\374hrung von Laboranalysen im Ausland ................... 29\n2.6 Vermittlung von Laboranalysen ......................................... 31\n2.7 Rechnungstellung .............................................................. 31\n2.8 \334berpr\374fung der Verordnung von Laboranalysen.............. 31\n2.9 Auskunfterteilung ............................................................... 32\n3. Medizinprodukte f\374r die In-vitro-Diagnostik (IVD) ..................... 33\n"
  begin
    result = @handler.next_pagehandler(src)
    assert_kind_of(IndexFinder, result)
    expected = {
      33  => 'Medizinprodukte für die In-vitro-Diagnostik (IVD)',
      5   => 'Rechtsgrundlagen',
      24  => 'Erläuterungen zu einzelnen Bestimmungen des KVG sowie der KVV und der KLV'
    }
    assert_equal(expected, result.index)
  end
end

- (Object) test_index_finder__5



145
146
147
148
149
150
151
152
153
154
155
156
# File 'ext/analysisparse/test/test_pagehandler.rb', line 145

def test_index_finder__5
  src = "Inhalts\374bersicht\nVorbemerkungen\n1. Rechtsgrundlagen ....................................................................... 5\n1.1 Auszug aus dem Bundesgesetz vom 18. M\344rz 1994\n\374ber die Krankenversicherung (KVG) .................................. 5\n1.2 Auszug aus der Verordnung \374ber die\nKrankenversicherung vom 27. Juni 1995 (KVV) ................ 13\n1.3 Auszug aus der Krankenpflege-Leistungsverordnung\n(KLV) vom 29. September 1995 ........................................ 20\n2. Erl\344uterungen zu einzelnen Bestimmungen des KVG sowie\nder KVV und der KLV................................................................ 24\n"
  begin
    result = @handler.next_pagehandler(src)
    assert_kind_of(IndexFinder, result)
    expected = {
      5   => 'Rechtsgrundlagen',
      24  => 'Erläuterungen zu einzelnen Bestimmungen des KVG sowie der KVV und der KLV'
    }
    assert_equal(expected, result.index)
  end
end

- (Object) test_index_finder__6



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'ext/analysisparse/test/test_pagehandler.rb', line 170

def test_index_finder__6
  src = "Inhalts\374bersicht\nVorbemerkungen\n1. Rechtsgrundlagen ....................................................................... 5\n1.1 Auszug aus dem Bundesgesetz vom 18. M\344rz 1994\n\374ber die Krankenversicherung (KVG) .................................. 5\n1.2 Auszug aus der Verordnung \374ber die\nKrankenversicherung vom 27. Juni 1995 (KVV) ................ 13\n1.3 Auszug aus der Krankenpflege-Leistungsverordnung\n(KLV) vom 29. September 1995 ........................................ 20\n2. Erl\344uterungen zu einzelnen Bestimmungen des KVG sowie\nder KVV und der KLV................................................................ 24\n2.1 Allgemeine Zulassungsbedingungen f\374r Laboratorien....... 24\n2.2 Spezielle Zulassungsbedingungen f\374r die\nverschiedenen Laboratoriumstypen................................... 25\n2.2.1 Laboratorien, die nur Analysen der Grundversorgung\ndurchf\374hren d\374rfen ................................ 25\n2.2.2 Laboratorien, die ausser den Analysen der\nGrundversorgung weitere Analysen durchf\374hren\nd\374rfen........................................................................ 25\n2.2.3 Laboratorien, die Analysen des Kapitels Genetik\nder Analysenliste durchf\374hren d\374rfen ....................... 26\n2.2.4 Laboratorien, die Analysen des Kapitels Mikrobiologie\nder Analysenliste durchf\374hren d\374rfen.......... 27\n2.2.5 Speziallaboratorien ................................................... 27\n2.3 Anh\344nge zur Analysenliste ................................................ 28\n2.4 Qualit\344tssicherung als Voraussetzung der Verg\374tung....... 29\n2.5 Durchf\374hrung von Laboranalysen im Ausland ................... 29\n2.6 Vermittlung von Laboranalysen ......................................... 31\n2.7 Rechnungstellung .............................................................. 31\n2.8 \334berpr\374fung der Verordnung von Laboranalysen.............. 31\n2.9 Auskunfterteilung ............................................................... 32\n3. Medizinprodukte f\374r die In-vitro-Diagnostik (IVD) ..................... 33\n4. Antr\344ge auf \304nderungen der Eidgen\366ssischen Analysenliste\n(AL) ........................................................................................... 33\n5. Tarif ........................................................................................... 35\n6. Systematik der Analysenlistenpositionen.................................. 37\n7. Abk\374rzungen ............................................................................. 37\n8. Bemerkungen zur vorliegenden Ausgabe ................................. 39\n4\nSystematische Auflistung der Analysen inkl. Anh\344nge\n1. Kapitel: Chemie/H\344matologie/Immunologie............................. 41\n2. Kapitel: Genetik\n2.1 Bemerkungen........................................................................ 75\n2.2 Liste der Analysen ................................................................ 76\n2.2.1 Chromosomenanalysen.............................................. 76\n2.2.2 Molekulargenetische Analysen ................................... 78\n3. Kapitel: Mikrobiologie\n3.1 Virologie ................................................................................ 85\n3.2 Bakteriologie/Mykologie ........................................................ 96\n3.2.1 Bemerkungen ............................................................. 96\n3.2.2 Liste der Analysen ...................................................... 96\n3.3 Parasitologie ...................................................................... 105\n4. Kapitel: \334brige\n4.1 Allgemeine Positionen ....................................................... 109\n4.2 Anonyme Positionen.......................................................... 111\n4.3 Fixe Analysenbl\366cke.......................................................... 120\n4.4 Liste seltener Autoantik\366rper ............................................. 121\n5. Kapitel: Anh\344nge zur Analysenliste ....................................... 123\n5.1 Anhang A\nIm Rahmen der Grundversorgung durchgef\374hrte Analysen\n5.1.1 Allgemeines .............................................................. 123\n5.1.2 \304rztliches Praxislaboratorium\n5.1.2.1 Definition \"Analysen im Rahmen der\nGrundversorgung\" bezogen auf das \344rztliche\nPraxislaboratorium........................................... 124\n5.1.2.2 Definition \"\304rztliches Praxislaboratorium\"........ 124\n5.1.2.3 Definition \"Pr\344senzdiagnostik\"......................... 125\n5.1.3 Analysen der Grundversorgung im engern Sinn....... 127\n5.1.4 Erweiterte Liste f\374r Fach\344rzte oder Fach\344rztinnen... 132\n5.2 Anhang B\nVon Chiropraktoren oder Chiropraktorinnen veranlasste\nAnalysen ............................................................................ 139\n5.3 Anhang C\nVon Hebammen veranlasste Analysen.............................. 141\nAlphabetisches Verzeichnis der Analysen\n(inkl. Synonyme) ........................................................................... 143\n" 
  begin
    result = @handler.next_pagehandler(src)
    assert_kind_of(IndexFinder, result)
    expected = {
      75  => 'Genetik',
      41  => 'Chemie/Hämatologie/Immunologie',
      5   => 'Rechtsgrundlagen',
      24  => 'Erläuterungen zu einzelnen Bestimmungen des KVG sowie der KVV und der KLV',
      33  => 'Anträge auf Änderungen der Eidgenössischen Analysenliste (AL)',
      35  => 'Tarif',
      37  => 'Abkürzungen',
      39  => 'Bemerkungen zur vorliegenden Ausgabe',
      85  => 'Mikrobiologie',
      109 =>  'Allgemeine Positionen',
      111 =>  'Anonyme Positionen',
      120 =>  'Fixe Analysenblöcke',
      121 =>  'Liste seltener Autoantikörper',
      123 =>  'Im Rahmen der Grundversorgung durchgeführte Analysen',
      139 =>  'Von Chiropraktoren oder Chiropraktorinnen veranlasste Analysen',
      141 =>  'Von Hebammen veranlasste Analysen'
    }
    assert_equal(expected.sort, result.index.sort)
  end
end

- (Object) test_index_finder__7



274
275
276
277
278
279
280
281
282
283
284
# File 'ext/analysisparse/test/test_pagehandler.rb', line 274

def test_index_finder__7
  src = "4.1 Allgemeine Positionen.......................................................109\n"
  begin
    result = @handler.next_pagehandler(src)
  end
    assert_kind_of(IndexFinder, result)
    expected = {
      109 =>  'Allgemeine Positionen',
    } 
    assert_equal(expected, result.index)
end

- (Object) test_parse_pages__1



288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
# File 'ext/analysisparse/test/test_pagehandler.rb', line 288

def test_parse_pages__1
  page_1 = "5.1.3 Analysen der Grundversorgung im engern Sinn\n\n\nTeilliste 2\n\nF\374r diese Analysen gilt auch f\374r das \344rztliche Praxislaboratorium der\nAnalysenlistentarif (Taxpunktwert und Taxpunktzahl).\n\nRev. Pos. Nr.  A TP  Bezeichnung (Liste Grundversorgung, Teilliste 2)\n\n1\nC     8000.00 1       8    ABO/D-Antigen, Kontrolle nach Empfehlun-\ngen BSD SRK \"Erythrozytenserologische\nUntersuchungen an Patientenproben\"\n8006.00          9  Alanin-Aminotransferase (ALAT)\n8007.00          9  Albumin, chemisch\n8036.00 2      16   Amphetamine, ql (Urin) (im Screening mit\nanderen Suchtstoffen: siehe 8535.04/05)\n8129.00 3      30   Blutgase (pH, pCO, pO\nabgeleitete Werte)\n8129.10 4      50  Oxymetrieblock (Oxyh\344moglobin,\nCarboxyh\344moglobin, Meth\344moglobin)\nN     8191.00         10   Spezielle Mikroskopie, Nativpr\344parat\n(Dunkelfeld, Polarisation, Phasenkontrast)\n129\n"
  page_2 = "Rev. Pos. Nr.  A TP  Bezeichnung (Liste Grundversorgung, Teilliste 2)\n\nN     8560.10\n6    H\344matologische Untersuchungen mit QBC-\nMethode\nLimitation: nur f\374r H\344moglobin und H\344matokrit.\nG\374ltig ab 1.1.2006 bis 31.12.2006.\n8572.00          9  Triglyceride\n8574.11         16  Troponin (T oder I), Schnelltest, nicht\nkumulierbar mit 8384.00 Kreatin-Kinase\n(CK), total\n8578.00          9  Urat\nC     8587.00       25   Vertr\344glichkeitsprobe: Kreuzprobe nach\nEmpfehlungen BSD SRK \"Erythrozyten-\nserologische Untersuchungen an Patien-\ntenproben\", pro Erythrozytenkonzentrat\n9116.40    *  12   HIV-1+2 -Antik\366rper (Screening) Schnelltest,\nql\nS     9710.00          8  Blutentnahme, Kapillarblut oder\nVenenpunktion, nur anwendbar durch\n\344rztliches Praxislaboratorium im Rahmen\nder Pr\344senzdiagnostik nach Artikel 54\nAbsatz 1 Buchstabe a KVV und Kapitel\n5.1.2 der Analysenliste\nLimitation: g \374ltig ab 1.5.2004 bis 31.12.2005\n___________________________________________________________\n*Anonyme Position\n1  Nur f\374r Spit\344ler\n2 Nur f\374r autorisierte Medizinalpersonen in Substitutions- oder Entzugsbehandlungen\nihrer eigenen Patienten\n3 Nur f\374r Spit\344ler und Pneumologen\n4 Nur f\374r Spit\344ler, Pneumologen und H\344matologen\n130\n"
  begin
    res1 = @index_handler.parse_page(page_1, 129, @parser)
    res2 = @index_handler.parse_page(page_2, 130, @parser)
  end
  item1 = res1.last
  item2 = res2.first
  expected_res_1 = [
    {
    :code              =>   '8000.00',
    :group           =>   '8000',
    :position          =>   '00',
    :taxpoints       =>   8,
    :description     =>    'ABO/D-Antigen, Kontrolle nach Empfehlungen BSD SRK "Erythrozytenserologische Untersuchungen an Patientenproben"',
    :taxpoint_type   =>   :default,
    :permissions     =>    [['Teilliste 2','Nur für Spitäler']],
    :list_title        =>    nil,
    :analysis_revision =>  'C',
  },
  {
    :code            =>    '8006.00',
    :group         =>    '8006',
    :position        =>    '00',
    :taxpoints     =>    9, 
    :description   =>   'Alanin-Aminotransferase (ALAT)',
    :taxpoint_type =>    :default,
    :permissions   =>   [['Teilliste 2', nil]],
    :list_title      =>   nil,
  },
  {
    :code            =>    '8007.00',
    :group         =>    '8007',
    :position        =>    '00',
    :taxpoints     =>    9,
    :description   =>   'Albumin, chemisch',
    :taxpoint_type =>    :default,
    :permissions   =>   [['Teilliste 2', nil]],
    :list_title      =>   nil,
  },
  {
    :code            =>    '8036.00',
    :group         =>    '8036',
    :position        =>    '00',
    :taxpoints     =>    16,
    :description   =>   'Amphetamine, ql (Urin) (im Screening mit anderen Suchtstoffen: siehe 8535.04/05)',
    :taxpoint_type =>    :default,
    :permissions   =>   [['Teilliste 2','Nur für autorisierte Medizinalpersonen in Substitutions- oder Entzugsbehandlungen ihrer eigenen Patienten']],
    :list_title      =>   nil,
  },
  {    
    :code            =>    '8129.00',
    :group         =>    '8129',
    :position        =>    '00',
    :taxpoints     =>    30,
    :description   =>   'Blutgase (pH, pCO, pO abgeleitete Werte)',
    :taxpoint_type =>    :default,
    :permissions   =>   [['Teilliste 2','Nur für Spitäler und Pneumologen']],
    :list_title      =>   nil,
  },
  {
    :code              =>   '8129.10',
    :group           =>   '8129',
    :position          =>   '10',
    :description     =>    'Oxymetrieblock (Oxyhämoglobin, Carboxyhämoglobin, Methämoglobin)',
    :taxpoints       =>   50,
    :list_title        =>    nil,
    :permissions     =>    [['Teilliste 2', 'Nur für Spitäler, Pneumologen und Hämatologen']],
    :taxpoint_type   =>   :default
  },
    {
    :code                =>  '8191.00',
    :group             =>  '8191',
    :position            =>  '00',
    :taxpoints         =>  10,
    :description       => 'Spezielle Mikroskopie, Nativpräparat (Dunkelfeld, Polarisation, Phasenkontrast)',
    :analysis_revision =>  "N",
    :list_title          => nil,
    :permissions       => [['Teilliste 2', nil]],
    :taxpoint_type     =>  :default,
  }
  ]
  expected = {
    :code                =>  '8191.00',
    :group             =>  '8191',
    :position            =>  '00',
    :taxpoints         =>  10,
    :description       => 'Spezielle Mikroskopie, Nativpräparat (Dunkelfeld, Polarisation, Phasenkontrast)',
    :analysis_revision =>  "N",
    :list_title          => nil,
    :permissions       => [['Teilliste 2',nil]],
    :taxpoint_type     =>  :default,
  }
  assert_equal(expected[:analysis_revision], item1[:analysis_revision])
  assert_equal(7, res1.size)
  assert_equal(expected_res_1.first, res1.first)
  assert_equal(expected_res_1.last, res1.last)
  assert_equal(expected_res_1.at(4), res1.at(4))
  assert_equal(expected_res_1, res1)
  expected = [
    {
    :code                  => '8560.10',  
    :analysis_revision   => 'N',
    :group               => '8560',
    :position              => '10',
    :taxpoints           => 6,
    :description         =>  'H ämatologische Untersuchungen mit QBC-Methode',
    :limitation            =>  'nur für Hämoglobin und Hämatokrit. Gültig ab 1.1.2006 bis 31.12.2006.',
    :list_title            =>  nil,
    :permissions         =>  [['Teilliste 2', nil]],
    :taxpoint_type       => :default,
  },
  {
    :code                  => '8572.00',
    :group               => '8572',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Triglyceride',
    :list_title            =>  nil,
    :permissions         =>  [['Teilliste 2', nil]],
    :taxpoint_type       => :default,
  },
  {
    :code                  => '8574.11',
    :group               => '8574',
    :position              => '11',
    :taxpoints           => 16,
    :description         =>  'Troponin (T oder I), Schnelltest, nicht kumulierbar mit 8384.00 Kreatin-Kinase (CK), total',
    :list_title            =>  nil,
    :permissions         =>  [['Teilliste 2', nil]],
    :taxpoint_type       => :default,
  },
  {
    :code                  => '8578.00',
    :group               => '8578',
    :position              => '00',
    :taxpoints           => 9,
    :description         =>  'Urat',
    :list_title            =>  nil,
    :taxpoint_type       => :default,
    :permissions         =>  [['Teilliste 2', nil]],
  },
  {
    :code                  => '8587.00',
    :group               => '8587',
    :position              => '00',
    :taxpoints           => 25,
    :description         =>  'Vertr äglichkeitsprobe: Kreuzprobe nach Empfehlungen BSD SRK "Erythrozytenserologische Untersuchungen an Patientenproben", pro Erythrozytenkonzentrat',
    :list_title            =>  nil,
    :permissions         =>  [['Teilliste 2', nil]],
    :taxpoint_type       => :default,
    :analysis_revision   => 'C',
  },
  {
    :code                  => '9116.40',
    :group               => '9116',
    :position              => '40',
    :taxpoints           => 12,
    :permissions         =>  [['Teilliste 2', nil]],
    :list_title            =>  nil,
    :description         =>  'HIV-1+2-Antikörper (Screening) Schnelltest, ql',
    :taxpoint_type       => :default,
    :anonymous           => true,
  },
  {
    :analysis_revision   => 'S',
    :code                  => '9710.00',
    :group               => '9710',
    :position              => '00',
    :taxpoints           => 8,
    :description         =>  'Blutentnahme, Kapillarblut oder Venenpunktion, nur anwendbar durch ärztliches Praxislaboratorium im Rahmen der Präsenzdiagnostik nach Artikel 54 Absatz 1 Buchstabe a KVV und Kapitel 5.1.2 der Analysenliste',
    :limitation            =>  'g ültig ab 1.5.2004 bis 31.12.2005',
    :taxpoint_type       => :default,
    :permissions         =>  [['Teilliste 2', nil]],
    :list_title            =>  nil,
  },
  ] 
  expected_res2_first = { 
    :code                  => '8560.10',  
    :analysis_revision   => 'N',
    :group               => '8560',
    :position              => '10',
    :taxpoints           => 6,
    :description         =>  'H ämatologische Untersuchungen mit QBC-Methode',
    :limitation            =>  'nur für Hämoglobin und Hämatokrit. Gültig ab 1.1.2006 bis 31.12.2006.',
    :list_title            =>  nil,
    :permissions         =>  [['Teilliste 2', nil]],
    :taxpoint_type       => :default,
  }
  expected_res2_fifth = {
    :code                  => '8587.00',
    :group               => '8587',
    :position              => '00',
    :taxpoints           => 25,
    :description         =>  'Vertr äglichkeitsprobe: Kreuzprobe nach Empfehlungen BSD SRK "Erythrozytenserologische Untersuchungen an Patientenproben", pro Erythrozytenkonzentrat',
    :list_title            =>  nil,
    :permissions         =>  [['Teilliste 2', nil]],
    :taxpoint_type       => :default,
    :analysis_revision   => 'C',
  }
  assert_equal(expected_res2_fifth, res2.at(4))
  assert_equal(expected_res2_first, res2.first)
  assert_equal(expected, res2)
end