ramaze.ch.oddb.org 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. data/History.txt +6 -0
  2. data/LICENSE +339 -0
  3. data/Manifest.txt +285 -0
  4. data/README.txt +45 -0
  5. data/Rakefile +28 -0
  6. data/bin/admin +69 -0
  7. data/bin/exportd +63 -0
  8. data/bin/migrate +461 -0
  9. data/bin/oddbd +62 -0
  10. data/data/fulltext/data/dicts/french/fulltext.aff +1057 -0
  11. data/data/fulltext/data/dicts/french/fulltext.dict +91189 -0
  12. data/data/fulltext/data/dicts/french/fulltext.stop +135 -0
  13. data/data/fulltext/data/dicts/german/fulltext.aff +1233 -0
  14. data/data/fulltext/data/dicts/german/fulltext.dict +287574 -0
  15. data/data/fulltext/data/dicts/german/fulltext.stop +133 -0
  16. data/data/fulltext/data/german_compound/README +15 -0
  17. data/data/fulltext/data/german_compound/compound.pl +63 -0
  18. data/data/fulltext/data/german_compound/german.stop +20 -0
  19. data/data/fulltext/data/ispell-german-compound.tar.gz +0 -0
  20. data/data/fulltext/redist/dict_french/Makefile +12 -0
  21. data/data/fulltext/redist/dict_french/README.french +1 -0
  22. data/data/fulltext/redist/dict_french/dict_french.sql.in +7 -0
  23. data/data/fulltext/redist/dict_french/dict_snowball.c +56 -0
  24. data/data/fulltext/redist/dict_french/french_stem.c +1222 -0
  25. data/data/fulltext/redist/dict_french/french_stem.h +16 -0
  26. data/data/fulltext/redist/dict_french/subinclude.h +2 -0
  27. data/data/fulltext/redist/dict_german/Makefile +12 -0
  28. data/data/fulltext/redist/dict_german/README.german +1 -0
  29. data/data/fulltext/redist/dict_german/dict_german.sql.in +7 -0
  30. data/data/fulltext/redist/dict_german/dict_snowball.c +56 -0
  31. data/data/fulltext/redist/dict_german/german_stem.c +527 -0
  32. data/data/fulltext/redist/dict_german/german_stem.h +16 -0
  33. data/data/fulltext/redist/dict_german/subinclude.h +1 -0
  34. data/data/fulltext/redist/french_stem.c +1222 -0
  35. data/data/fulltext/redist/french_stem.h +16 -0
  36. data/data/fulltext/redist/german_stem.c +527 -0
  37. data/data/fulltext/redist/german_stem.h +16 -0
  38. data/lib/fixes/ruby19.rb +21 -0
  39. data/lib/fixes/selenium.rb +20 -0
  40. data/lib/fixes/singular.rb +8 -0
  41. data/lib/fixes/yaml.rb +13 -0
  42. data/lib/oddb.rb +11 -0
  43. data/lib/oddb/business/company.rb +18 -0
  44. data/lib/oddb/business/invoice.rb +75 -0
  45. data/lib/oddb/business/price.rb +60 -0
  46. data/lib/oddb/config.rb +73 -0
  47. data/lib/oddb/drugs.rb +16 -0
  48. data/lib/oddb/drugs/active_agent.rb +37 -0
  49. data/lib/oddb/drugs/atc.rb +53 -0
  50. data/lib/oddb/drugs/composition.rb +41 -0
  51. data/lib/oddb/drugs/ddd.rb +24 -0
  52. data/lib/oddb/drugs/dose.rb +107 -0
  53. data/lib/oddb/drugs/galenic_form.rb +21 -0
  54. data/lib/oddb/drugs/galenic_group.rb +17 -0
  55. data/lib/oddb/drugs/package.rb +87 -0
  56. data/lib/oddb/drugs/part.rb +56 -0
  57. data/lib/oddb/drugs/product.rb +25 -0
  58. data/lib/oddb/drugs/sequence.rb +61 -0
  59. data/lib/oddb/drugs/substance.rb +31 -0
  60. data/lib/oddb/drugs/substance_group.rb +13 -0
  61. data/lib/oddb/drugs/unit.rb +12 -0
  62. data/lib/oddb/export.rb +4 -0
  63. data/lib/oddb/export/csv.rb +89 -0
  64. data/lib/oddb/export/l10n_sessions.rb +30 -0
  65. data/lib/oddb/export/rss.rb +44 -0
  66. data/lib/oddb/export/server.rb +58 -0
  67. data/lib/oddb/export/xls.rb +119 -0
  68. data/lib/oddb/export/yaml.rb +123 -0
  69. data/lib/oddb/html/state/drugs/admin/package.rb +189 -0
  70. data/lib/oddb/html/state/drugs/admin/product.rb +56 -0
  71. data/lib/oddb/html/state/drugs/admin/sequence.rb +259 -0
  72. data/lib/oddb/html/state/drugs/ajax/explain_ddd_price.rb +19 -0
  73. data/lib/oddb/html/state/drugs/ajax/explain_price.rb +19 -0
  74. data/lib/oddb/html/state/drugs/ajax/global.rb +18 -0
  75. data/lib/oddb/html/state/drugs/ajax/package_infos.rb +19 -0
  76. data/lib/oddb/html/state/drugs/ajax/remote_infos.rb +19 -0
  77. data/lib/oddb/html/state/drugs/atc_browser.rb +39 -0
  78. data/lib/oddb/html/state/drugs/atc_guidelines.rb +21 -0
  79. data/lib/oddb/html/state/drugs/compare.rb +52 -0
  80. data/lib/oddb/html/state/drugs/download_export.rb +18 -0
  81. data/lib/oddb/html/state/drugs/fachinfo.rb +21 -0
  82. data/lib/oddb/html/state/drugs/feedback.rb +94 -0
  83. data/lib/oddb/html/state/drugs/global.rb +266 -0
  84. data/lib/oddb/html/state/drugs/init.rb +18 -0
  85. data/lib/oddb/html/state/drugs/login.rb +17 -0
  86. data/lib/oddb/html/state/drugs/package.rb +32 -0
  87. data/lib/oddb/html/state/drugs/patinfo.rb +21 -0
  88. data/lib/oddb/html/state/drugs/products.rb +51 -0
  89. data/lib/oddb/html/state/drugs/result.rb +125 -0
  90. data/lib/oddb/html/state/global.rb +165 -0
  91. data/lib/oddb/html/state/global_predefine.rb +17 -0
  92. data/lib/oddb/html/state/limit.rb +17 -0
  93. data/lib/oddb/html/state/login.rb +56 -0
  94. data/lib/oddb/html/state/paypal/checkout.rb +130 -0
  95. data/lib/oddb/html/state/paypal/collect.rb +46 -0
  96. data/lib/oddb/html/state/paypal/redirect.rb +18 -0
  97. data/lib/oddb/html/state/register_export.rb +38 -0
  98. data/lib/oddb/html/state/register_poweruser.rb +17 -0
  99. data/lib/oddb/html/state/viral/admin.rb +76 -0
  100. data/lib/oddb/html/state/viral/poweruser.rb +16 -0
  101. data/lib/oddb/html/util/annotated_list.rb +39 -0
  102. data/lib/oddb/html/util/know_it_all.rb +28 -0
  103. data/lib/oddb/html/util/known_user.rb +55 -0
  104. data/lib/oddb/html/util/lookandfeel.rb +554 -0
  105. data/lib/oddb/html/util/need_all_input.rb +29 -0
  106. data/lib/oddb/html/util/session.rb +88 -0
  107. data/lib/oddb/html/util/sort.rb +72 -0
  108. data/lib/oddb/html/util/unsaved_helper.rb +20 -0
  109. data/lib/oddb/html/util/validator.rb +54 -0
  110. data/lib/oddb/html/view/ajax/json.rb +22 -0
  111. data/lib/oddb/html/view/alpha_header.rb +28 -0
  112. data/lib/oddb/html/view/document.rb +126 -0
  113. data/lib/oddb/html/view/drugs/admin/package.rb +237 -0
  114. data/lib/oddb/html/view/drugs/admin/product.rb +104 -0
  115. data/lib/oddb/html/view/drugs/admin/sequence.rb +312 -0
  116. data/lib/oddb/html/view/drugs/ajax/explain_ddd_price.rb +87 -0
  117. data/lib/oddb/html/view/drugs/ajax/explain_price.rb +61 -0
  118. data/lib/oddb/html/view/drugs/ajax/package_infos.rb +105 -0
  119. data/lib/oddb/html/view/drugs/ajax/remote_infos.rb +44 -0
  120. data/lib/oddb/html/view/drugs/atc_browser.rb +68 -0
  121. data/lib/oddb/html/view/drugs/atc_guidelines.rb +94 -0
  122. data/lib/oddb/html/view/drugs/compare.rb +95 -0
  123. data/lib/oddb/html/view/drugs/download_export.rb +28 -0
  124. data/lib/oddb/html/view/drugs/fachinfo.rb +46 -0
  125. data/lib/oddb/html/view/drugs/feedback.rb +231 -0
  126. data/lib/oddb/html/view/drugs/init.rb +51 -0
  127. data/lib/oddb/html/view/drugs/legend.rb +24 -0
  128. data/lib/oddb/html/view/drugs/package.rb +398 -0
  129. data/lib/oddb/html/view/drugs/patinfo.rb +46 -0
  130. data/lib/oddb/html/view/drugs/products.rb +97 -0
  131. data/lib/oddb/html/view/drugs/result.rb +296 -0
  132. data/lib/oddb/html/view/drugs/search.rb +33 -0
  133. data/lib/oddb/html/view/drugs/template.rb +15 -0
  134. data/lib/oddb/html/view/foot.rb +52 -0
  135. data/lib/oddb/html/view/google.rb +23 -0
  136. data/lib/oddb/html/view/google_ads.rb +40 -0
  137. data/lib/oddb/html/view/head.rb +78 -0
  138. data/lib/oddb/html/view/limit.rb +109 -0
  139. data/lib/oddb/html/view/list.rb +59 -0
  140. data/lib/oddb/html/view/login.rb +38 -0
  141. data/lib/oddb/html/view/navigation.rb +67 -0
  142. data/lib/oddb/html/view/offset_header.rb +35 -0
  143. data/lib/oddb/html/view/paypal/collect.rb +84 -0
  144. data/lib/oddb/html/view/paypal/redirect.rb +51 -0
  145. data/lib/oddb/html/view/paypal/register_form.rb +106 -0
  146. data/lib/oddb/html/view/register_export.rb +29 -0
  147. data/lib/oddb/html/view/register_poweruser.rb +29 -0
  148. data/lib/oddb/html/view/rss/feedback.rb +64 -0
  149. data/lib/oddb/html/view/rss_preview.rb +54 -0
  150. data/lib/oddb/html/view/search.rb +104 -0
  151. data/lib/oddb/html/view/snapback.rb +24 -0
  152. data/lib/oddb/html/view/template.rb +56 -0
  153. data/lib/oddb/import/excel.rb +45 -0
  154. data/lib/oddb/import/import.rb +39 -0
  155. data/lib/oddb/import/rtf.rb +410 -0
  156. data/lib/oddb/import/whocc.rb +173 -0
  157. data/lib/oddb/import/xml.rb +15 -0
  158. data/lib/oddb/model.rb +179 -0
  159. data/lib/oddb/persistence/odba.rb +33 -0
  160. data/lib/oddb/persistence/odba/business/company.rb +13 -0
  161. data/lib/oddb/persistence/odba/business/invoice.rb +15 -0
  162. data/lib/oddb/persistence/odba/drugs/atc.rb +15 -0
  163. data/lib/oddb/persistence/odba/drugs/galenic_form.rb +18 -0
  164. data/lib/oddb/persistence/odba/drugs/galenic_group.rb +13 -0
  165. data/lib/oddb/persistence/odba/drugs/package.rb +25 -0
  166. data/lib/oddb/persistence/odba/drugs/product.rb +13 -0
  167. data/lib/oddb/persistence/odba/drugs/sequence.rb +21 -0
  168. data/lib/oddb/persistence/odba/drugs/substance.rb +21 -0
  169. data/lib/oddb/persistence/odba/drugs/substance_group.rb +13 -0
  170. data/lib/oddb/persistence/odba/drugs/unit.rb +13 -0
  171. data/lib/oddb/persistence/odba/export.rb +26 -0
  172. data/lib/oddb/persistence/odba/model.rb +68 -0
  173. data/lib/oddb/persistence/odba/regulatory/authority.rb +13 -0
  174. data/lib/oddb/persistence/odba/regulatory/registration.rb +13 -0
  175. data/lib/oddb/persistence/odba/text/document.rb +11 -0
  176. data/lib/oddb/persistence/odba/util/code.rb +11 -0
  177. data/lib/oddb/persistence/odba/util/m10l_document.rb +13 -0
  178. data/lib/oddb/persistence/og.rb +16 -0
  179. data/lib/oddb/persistence/og/drugs/composition.rb +14 -0
  180. data/lib/oddb/persistence/og/drugs/product.rb +14 -0
  181. data/lib/oddb/persistence/og/drugs/sequence.rb +15 -0
  182. data/lib/oddb/persistence/og/model.rb +25 -0
  183. data/lib/oddb/persistence/og/util/multilingual.rb +13 -0
  184. data/lib/oddb/redist/rtf_tools/reader.rb +139 -0
  185. data/lib/oddb/regulatory/authority.rb +14 -0
  186. data/lib/oddb/regulatory/registration.rb +15 -0
  187. data/lib/oddb/remote/business/company.rb +23 -0
  188. data/lib/oddb/remote/drugs/active_agent.rb +27 -0
  189. data/lib/oddb/remote/drugs/atc.rb +32 -0
  190. data/lib/oddb/remote/drugs/dose.rb +8 -0
  191. data/lib/oddb/remote/drugs/galenic_form.rb +25 -0
  192. data/lib/oddb/remote/drugs/package.rb +126 -0
  193. data/lib/oddb/remote/drugs/part.rb +30 -0
  194. data/lib/oddb/remote/drugs/product.rb +19 -0
  195. data/lib/oddb/remote/drugs/sequence.rb +46 -0
  196. data/lib/oddb/remote/drugs/substance.rb +20 -0
  197. data/lib/oddb/remote/drugs/unit.rb +19 -0
  198. data/lib/oddb/remote/object.rb +36 -0
  199. data/lib/oddb/remote/text/document.rb +20 -0
  200. data/lib/oddb/remote/util/m10l_document.rb +22 -0
  201. data/lib/oddb/text/chapter.rb +27 -0
  202. data/lib/oddb/text/document.rb +43 -0
  203. data/lib/oddb/text/format.rb +37 -0
  204. data/lib/oddb/text/paragraph.rb +58 -0
  205. data/lib/oddb/text/picture.rb +93 -0
  206. data/lib/oddb/text/table.rb +68 -0
  207. data/lib/oddb/util.rb +8 -0
  208. data/lib/oddb/util/annotated_list.rb +37 -0
  209. data/lib/oddb/util/code.rb +69 -0
  210. data/lib/oddb/util/comparison.rb +36 -0
  211. data/lib/oddb/util/exporter.rb +8 -0
  212. data/lib/oddb/util/feedback.rb +23 -0
  213. data/lib/oddb/util/ipn.rb +48 -0
  214. data/lib/oddb/util/m10l_document.rb +38 -0
  215. data/lib/oddb/util/mail.rb +73 -0
  216. data/lib/oddb/util/money.rb +60 -0
  217. data/lib/oddb/util/multilingual.rb +70 -0
  218. data/lib/oddb/util/quanty.rb +4 -0
  219. data/lib/oddb/util/quanty/fact.rb +229 -0
  220. data/lib/oddb/util/quanty/main.rb +160 -0
  221. data/lib/oddb/util/quanty/parse.rb +853 -0
  222. data/lib/oddb/util/quanty/units.dump +0 -0
  223. data/lib/oddb/util/server.rb +117 -0
  224. data/lib/oddb/util/updater.rb +41 -0
  225. data/lib/oddb/util/ydim.rb +110 -0
  226. data/lib/oddb/util/yus.rb +46 -0
  227. data/test/business/test_company.rb +29 -0
  228. data/test/business/test_price.rb +46 -0
  229. data/test/drugs/test_active_agent.rb +53 -0
  230. data/test/drugs/test_atc.rb +54 -0
  231. data/test/drugs/test_composition.rb +88 -0
  232. data/test/drugs/test_ddd.rb +22 -0
  233. data/test/drugs/test_dose.rb +190 -0
  234. data/test/drugs/test_galenic_form.rb +41 -0
  235. data/test/drugs/test_package.rb +173 -0
  236. data/test/drugs/test_part.rb +32 -0
  237. data/test/drugs/test_product.rb +31 -0
  238. data/test/drugs/test_sequence.rb +140 -0
  239. data/test/drugs/test_substance.rb +51 -0
  240. data/test/drugs/test_substance_group.rb +27 -0
  241. data/test/export/test_rss.rb +94 -0
  242. data/test/export/test_server.rb +117 -0
  243. data/test/export/test_xls.rb +152 -0
  244. data/test/export/test_yaml.rb +120 -0
  245. data/test/import/data/html/whocc/A.html +56 -0
  246. data/test/import/data/html/whocc/A03.html +48 -0
  247. data/test/import/data/html/whocc/A03AB.html +48 -0
  248. data/test/import/data/html/whocc/A06AA.html +47 -0
  249. data/test/import/data/html/whocc/C03.html +47 -0
  250. data/test/import/data/html/whocc/login.html +77 -0
  251. data/test/import/data/xml/ATC_2006.xml +47 -0
  252. data/test/import/data/xml/ATC_2006_ddd.xml +35 -0
  253. data/test/import/test_excel.rb +34 -0
  254. data/test/import/test_rtf.rb +40 -0
  255. data/test/import/test_whocc.rb +315 -0
  256. data/test/remote/drugs/test_active_agent.rb +36 -0
  257. data/test/selenium/selenium-server.jar +0 -0
  258. data/test/selenium/test_atc_browser.rb +122 -0
  259. data/test/selenium/test_atc_guidelines.rb +96 -0
  260. data/test/selenium/test_collect.rb +138 -0
  261. data/test/selenium/test_compare.rb +206 -0
  262. data/test/selenium/test_fachinfo.rb +130 -0
  263. data/test/selenium/test_feedback.rb +196 -0
  264. data/test/selenium/test_init.rb +52 -0
  265. data/test/selenium/test_limit.rb +305 -0
  266. data/test/selenium/test_login.rb +67 -0
  267. data/test/selenium/test_package.rb +512 -0
  268. data/test/selenium/test_patinfo.rb +131 -0
  269. data/test/selenium/test_product.rb +80 -0
  270. data/test/selenium/test_products.rb +142 -0
  271. data/test/selenium/test_search.rb +715 -0
  272. data/test/selenium/test_sequence.rb +543 -0
  273. data/test/selenium/unit.rb +185 -0
  274. data/test/stub/http_server.rb +169 -0
  275. data/test/stub/model.rb +173 -0
  276. data/test/suite.rb +15 -0
  277. data/test/test_model.rb +83 -0
  278. data/test/util/test_code.rb +74 -0
  279. data/test/util/test_ipn.rb +117 -0
  280. data/test/util/test_mail.rb +86 -0
  281. data/test/util/test_multilingual.rb +97 -0
  282. data/test/util/test_server.rb +48 -0
  283. data/test/util/test_updater.rb +353 -0
  284. data/test/util/test_ydim.rb +115 -0
  285. data/test/util/test_yus.rb +79 -0
  286. metadata +418 -0
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::Ddd -- de.oddb.org -- 20.11.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class Ddd < Model
9
+ attr_reader :administration
10
+ attr_accessor :dose, :comment
11
+ belongs_to :atc
12
+ def initialize(administration)
13
+ @administration = administration
14
+ end
15
+ def to_s
16
+ if(@comment)
17
+ sprintf("%s: %s (%s)", @administration, @dose, @comment)
18
+ else
19
+ sprintf("%s: %s", @administration, @dose)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::Dose -- de.oddb.org -- 07.11.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/util/quanty'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class Dose < Quanty
9
+ include Comparable
10
+ alias :qty :val
11
+ np = '-?[0-9]+(?:[.,][0-9]+)?' ## numerical pattern
12
+ @@range_ptrn = %r{(#{np})\s*-\s*(#{np})}
13
+ @@cnc_ptrn = %r{([^/]*)/\s*(#{np})\s*(.*)}
14
+ def Dose.from_quanty(other)
15
+ Dose.new(other.val, other.unit)
16
+ end
17
+ def initialize(qty, unit=nil)
18
+ qty_str = ''
19
+ if(match = @@range_ptrn.match(qty.to_s))
20
+ qty = round(match[1].to_f)..round(match[2].to_f)
21
+ end
22
+ if(qty.is_a?(Range))
23
+ qty_str = "#{qty.first}-#{qty.last}"
24
+ qty = (qty.first + qty.last) / 2.0
25
+ @not_normalized = [qty_str, unit].compact.join(' ')
26
+ end
27
+ if(match = @@cnc_ptrn.match(unit.to_s))
28
+ qty_str = round(qty).to_s
29
+ div = round(match[2])
30
+ @not_normalized = [
31
+ qty_str,
32
+ [match[1].strip, div].join(' / '),
33
+ match[3],
34
+ ].join
35
+ qty = qty.to_f/div.to_f
36
+ unit = [match[1].strip,match[3].strip].join('/')
37
+ end
38
+ qty = round(qty)
39
+ unit = unit.to_s.tr('L', 'l')
40
+ fuzzy_retry = true
41
+ strict_retry = true
42
+ begin
43
+ super(qty, unit)
44
+ rescue StandardError => e
45
+ if(fuzzy_retry)
46
+ unit = unit[0,2]
47
+ fuzzy_retry = false
48
+ retry
49
+ elsif(strict_retry)
50
+ unit = ''
51
+ strict_retry = false
52
+ retry
53
+ end
54
+ end
55
+ end
56
+ def to_f
57
+ begin
58
+ super
59
+ rescue StandardError
60
+ @val * @fact.factor
61
+ end
62
+ end
63
+ def to_i
64
+ @val.to_i
65
+ end
66
+ def to_s
67
+ @not_normalized or
68
+ begin
69
+ val = if(@val.is_a? Float)
70
+ sprintf('%.3f', @val).gsub(/0+$/, '')
71
+ else
72
+ @val
73
+ end
74
+ [val, @unit].join(' ')
75
+ end
76
+ end
77
+ def * (other)
78
+ Dose.from_quanty(super)
79
+ end
80
+ def + (other)
81
+ Dose.from_quanty(super)
82
+ end
83
+ def / (other)
84
+ Dose.from_quanty(super)
85
+ end
86
+ def - (other)
87
+ Dose.from_quanty(super)
88
+ end
89
+ def <=>(other)
90
+ begin
91
+ (@val * 1000).round <=> (adjust(other) * 1000).round
92
+ rescue StandardError
93
+ @unit <=> other.unit
94
+ end
95
+ end
96
+ private
97
+ def round(qty)
98
+ qty = qty.to_s.gsub(/'/, '').gsub(',', '.')
99
+ if(qty.to_f == qty.to_i)
100
+ qty.to_i
101
+ else
102
+ qty.to_f
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::GalenicForm -- de.oddb.org -- 11.09.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+ require 'oddb/drugs/galenic_group'
6
+
7
+ module ODDB
8
+ module Drugs
9
+ class GalenicForm < Model
10
+ is_coded
11
+ multilingual :description
12
+ alias :name :description
13
+ belongs_to :group
14
+ def ==(other)
15
+ super || (!@group.nil? && @group == other.group)
16
+ rescue
17
+ false
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::GalenicGroup -- de.oddb.org -- 21.02.2007 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class GalenicGroup < Model
9
+ multilingual :name
10
+ has_many :galenic_forms
11
+ attr_accessor :administration
12
+ def initialize(groupname, language='de')
13
+ name.send("%s=" % language, groupname)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::Package -- de.oddb.org -- 14.11.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/business/price'
5
+ require 'oddb/config'
6
+ require 'oddb/model'
7
+ require 'time'
8
+
9
+ module ODDB
10
+ module Drugs
11
+ class Package < Model
12
+ belongs_to :sequence,
13
+ delegates(:active_agents, :atc, :company, :compositions, :ddds, :doses,
14
+ :fachinfo_url, :fachinfo, :galenic_forms, :patinfo,
15
+ :patinfo_url, :product, :registration, :substances)
16
+ has_many :feedbacks, on_delete(:cascade)
17
+ has_many :parts, on_delete(:cascade), delegates(:comparable_size)
18
+ has_many :prices
19
+ is_coded
20
+ multilingual :name
21
+ def comparable?(other)
22
+ return false unless(other.is_a?(Package))
23
+ csizes = comparable_size.collect { |psize|
24
+ [(psize*0.75), (psize*1.25)]
25
+ }
26
+ osizes = other.comparable_size
27
+ idx = -1
28
+ osizes.length == csizes.length && csizes.all? { |lower, upper|
29
+ idx += 1
30
+ size = osizes.at(idx)
31
+ lower <= size && size <= upper
32
+ }
33
+ end
34
+ def comparables
35
+ @sequence.comparables.inject([]) { |memo, sequence|
36
+ memo.concat sequence.packages.select { |package|
37
+ (package != self) && comparable?(package)
38
+ }
39
+ }
40
+ end
41
+ def dose_price(dose)
42
+ if(price = price(:public))
43
+ pdose = doses.first.want(dose.unit)
44
+ Util::Money.new((dose / pdose).to_f * (price.to_f / size))
45
+ end
46
+ rescue StandardError
47
+ end
48
+ def price(type, country=ODDB.config.country)
49
+ prices.find { |money| money.is_for?(type, country) }
50
+ end
51
+ def price_exfactory(country=ODDB.config.country)
52
+ price(:exfactory, country)
53
+ end
54
+ def _price_exfactory(country=ODDB.config.country)
55
+ if((price = price(:public, country)) \
56
+ && (code = code(:prescription)) && code.value)
57
+ c = ODDB.config
58
+ efp = (price - c.pharmacy_premium) * 100 /
59
+ (100.0 + c.vat + c.pharmacy_percentage)
60
+ efp.type = :exfactory
61
+ efp.country = country
62
+ efp
63
+ end
64
+ end
65
+ unless(instance_methods.include?(:__sequence_writer__))
66
+ alias :__sequence_writer__ :sequence=
67
+ end
68
+ def sequence=(seq)
69
+ old = @sequence
70
+ __sequence_writer__(seq)
71
+ if(seq)
72
+ comps = seq.compositions
73
+ parts.each_with_index { |part, idx|
74
+ part.composition = comps.at(idx)
75
+ part.save
76
+ }
77
+ else
78
+ parts.each { |part| part.composition = nil }
79
+ end
80
+ seq
81
+ end
82
+ def size
83
+ parts.inject(0) { |memo, part| memo + part.comparable_size.qty }
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Drugs::Part -- de.oddb.org -- 14.11.2006 -- hwyss@ywesee.com
4
+
5
+ require 'oddb/model'
6
+ require 'oddb/drugs/dose'
7
+
8
+ module ODDB
9
+ module Drugs
10
+ class Part < Model
11
+ belongs_to :package, delegates(:sequence)
12
+ belongs_to :composition, delegates(:active_agents)
13
+ ## A partial package can be described as e.g.
14
+ # 10 x 5 Ampoules of 20 ml
15
+ # ^----------------------- :multi - Numeric
16
+ # ^------------------- :size - Numeric
17
+ # ^------------ :unit - Unit (a multilingual)
18
+ # ^---- :quantity - Dose
19
+ attr_accessor :unit, :quantity, :multi
20
+ attr_reader :size
21
+ def initialize
22
+ super
23
+ @size = 1
24
+ end
25
+ def comparable_size
26
+ (@quantity || Dose.new(1)) * (@size || 1) * (@multi || 1)
27
+ end
28
+ def size=(size)
29
+ size ||= 1
30
+ if(size.to_f == size.to_i.to_f)
31
+ @size = size.to_i
32
+ else
33
+ @size = size.to_f
34
+ end
35
+ end
36
+ def to_s(language=:de)
37
+ parts = []
38
+ multi = @multi.to_i
39
+ if(multi > 1)
40
+ parts.push multi, 'x'
41
+ end
42
+ size = @size.to_i
43
+ if(size > 1)
44
+ parts.push(size)
45
+ end
46
+ if(unit = @unit)
47
+ parts.push(unit.name.send(language))
48
+ end
49
+ if(quantity = @quantity)
50
+ parts.push 'à', quantity
51
+ end
52
+ parts.join(' ')
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::Product -- de.oddb.org -- 09.08.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class Product < Model
9
+ belongs_to :company
10
+ has_many :sequences, on_delete(:cascade), delegates(:substances, :packages)
11
+ multilingual :name
12
+ def initialize
13
+ @sequences = []
14
+ end
15
+ def atcs
16
+ sequences.collect { |sequence| sequence.atc }.compact.uniq
17
+ end
18
+ def packages
19
+ sequences.inject([]) { |memo, seq|
20
+ memo.concat(seq.packages)
21
+ }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::Sequence -- de.oddb.org -- 31.08.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class Sequence < Model
9
+ attr_accessor :marketable, :fachinfo_url, :patinfo_url
10
+ belongs_to :atc, delegates(:ddds)
11
+ belongs_to :product, delegates(:company)
12
+ has_many :compositions,
13
+ delegates(:active_agents, :doses, :substances),
14
+ on_delete(:cascade)
15
+ has_many :packages, on_delete(:cascade), on_save(:cascade)
16
+ has_many :registrations, on_save(:cascade)
17
+ is_coded
18
+ multilingual :name
19
+ m10l_document :fachinfo
20
+ m10l_document :patinfo
21
+ def comparable?(other)
22
+ other.is_a?(Sequence) && compositions == other.compositions
23
+ end
24
+ def comparables
25
+ atc.sequences.select { |sequence|
26
+ comparable?(sequence)
27
+ }
28
+ end
29
+ def ddds # ddds depend on the sequence's Route of Administration
30
+ forms = galenic_forms
31
+ if(forms.size == 1 && (atc_class = atc) \
32
+ && (group = forms.first.group) \
33
+ && (roa = group.administration))
34
+ atc_class.ddds.select { |ddd|
35
+ ddd.administration == roa }
36
+ else
37
+ []
38
+ end
39
+ end
40
+ def galenic_forms
41
+ compositions.collect { |comp| comp.galenic_form }.compact.uniq
42
+ end
43
+ def identical?(other)
44
+ comparable?(other) && other.product == product \
45
+ && compositions.each_with_index { |comp, idx|
46
+ unless(comp.galenic_form.eql?(other.compositions.at(idx).galenic_form))
47
+ return false
48
+ end
49
+ } && true
50
+ end
51
+ def include?(substance, dose=nil, unit=nil)
52
+ compositions.any? { |comp|
53
+ comp.include?(substance, dose, unit)
54
+ }
55
+ end
56
+ def registration
57
+ code(:registration, 'EU')
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::Substance -- de.oddb.org -- 12.09.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class Substance < Model
9
+ include Comparable
10
+ belongs_to :group
11
+ has_many :active_agents, delegates(:packages)
12
+ is_coded
13
+ multilingual :name
14
+ def merge(other)
15
+ name.merge other.name
16
+ other.active_agents.dup.each { |agent|
17
+ agent.substance = self
18
+ agent.save
19
+ }
20
+ other.delete
21
+ save
22
+ end
23
+ def ==(other)
24
+ super || name == other
25
+ end
26
+ def <=>(other)
27
+ name <=> other.name
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ # Drugs::SubstanceGroup -- de.oddb.org -- 13.11.2006 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/model'
5
+
6
+ module ODDB
7
+ module Drugs
8
+ class SubstanceGroup < Model
9
+ multilingual :name
10
+ has_many :substances
11
+ end
12
+ end
13
+ end