exner 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 (46) hide show
  1. data/.autotest +23 -0
  2. data/.gemtest +0 -0
  3. data/History.txt +4 -0
  4. data/Manifest.txt +42 -0
  5. data/README.txt +49 -0
  6. data/Rakefile +19 -0
  7. data/bin/rorschach +4 -0
  8. data/bin/zulliger +4 -0
  9. data/data/.~lock.sumario_Zulliger.rtf# +1 -0
  10. data/data/Rorschach_Zest.txt +50 -0
  11. data/data/Zulliger_Zest.txt +50 -0
  12. data/data/sumario.rtf +240 -0
  13. data/data/sumario2.rtf +271 -0
  14. data/data/sumario_Rorschach.rtf +233 -0
  15. data/data/sumario_Zulliger.rtf +203 -0
  16. data/data/test_manchas.txt +16 -0
  17. data/data/zulli_test.txt +11 -0
  18. data/lib/exner/respuesta.rb +110 -0
  19. data/lib/exner/rorschach.rb +11 -0
  20. data/lib/exner/rorschach_plugins/cdi.rb +22 -0
  21. data/lib/exner/rorschach_plugins/depi.rb +38 -0
  22. data/lib/exner/rorschach_plugins/hvi.rb +25 -0
  23. data/lib/exner/rorschach_plugins/interpretacion.rb +438 -0
  24. data/lib/exner/rorschach_plugins/obs.rb +36 -0
  25. data/lib/exner/rorschach_plugins/scon.rb +44 -0
  26. data/lib/exner/rorschach_plugins/sczi.rb +25 -0
  27. data/lib/exner/rtf/rorschach.rb +69 -0
  28. data/lib/exner/rtf/zulliger.rb +59 -0
  29. data/lib/exner/rtf.rb +46 -0
  30. data/lib/exner/test_manchas.rb +445 -0
  31. data/lib/exner/zulliger.rb +26 -0
  32. data/lib/exner/zulliger_plugins/interpretacion.rb +328 -0
  33. data/lib/exner.rb +44 -0
  34. data/test/extras.rb +11 -0
  35. data/test/helpers_tests.rb +41 -0
  36. data/test/test_depi.rb +29 -0
  37. data/test/test_exner.rb +100 -0
  38. data/test/test_hvi.rb +33 -0
  39. data/test/test_obs.rb +29 -0
  40. data/test/test_rorschach.rb +1 -0
  41. data/test/test_scon.rb +34 -0
  42. data/test/test_sczi.rb +29 -0
  43. data/test/text_cdi.rb +28 -0
  44. data.tar.gz.sig +0 -0
  45. metadata +193 -0
  46. metadata.gz.sig +0 -0
@@ -0,0 +1,438 @@
1
+ # encoding: UTF-8
2
+ require 'iconv'
3
+ module Exner
4
+ class Rorschach
5
+ # calcula, para un determinado valor en los baremos
6
+ # el porcentaje que le corresponde al valor específico
7
+ # hace el ajuste en función al número de respuestas
8
+ def norma(valor)
9
+ r_est=22.67
10
+ return (valor*self.R) / r_est
11
+ end
12
+ def respuestatriple(valor,bajo,alto,resp_bajo,resp_alto,resp_normal)
13
+ if valor<bajo
14
+ return resp_bajo
15
+ elsif valor>alto
16
+ return resp_alto
17
+ else
18
+ return resp_normal
19
+ end
20
+ end
21
+ def interpretacion
22
+ salida=Array.new
23
+ # Lambda
24
+ salida.push('{\b Controles}')
25
+ if self.R < 14
26
+ salida.push('{\b ATENCION: POCAS RESPUESTAS. TEST INVALIDO}')
27
+ end
28
+
29
+ if self.L> 0.84
30
+ salida.push("L aumentado. Sobresimplificación perceptiva. Registro sólo de lo cognitivo. Se evita lo emocional. INHIBICION DE POTENCIAL: Restricción emocional, sobrecontrol")
31
+ if self.L>1
32
+ if self.R >=17 or self.EA>=4
33
+ salida.push("Estilo evitativo. Trata estímulos de forma simple, evitando aspectos intrincado y ambigüedades")
34
+ else
35
+ salida.push("DEFENSIVIDAD SITUACIONAL. Puede ser que EA no sea válido")
36
+ end
37
+ end
38
+ elsif self.L<0.32
39
+ salida.push("L < disminuido. No es capaz de simplificar las percepciones. Sobrestimulación emocional, pudiéndose agotar. Revisar Hiperincorporación. INHIBICION DE POTENCIAL: sobrestimulación, especialmente emocional")
40
+ else
41
+ salida.push("L normal. Manejo normal de la cantidad de información")
42
+ end
43
+ # Tipo vivencial
44
+ if self.EA>=4
45
+ salida.push("Estilo vivencial bien definido")
46
+ else
47
+ salida.push("No se puede definir bien el estilo vivencial")
48
+ end
49
+
50
+ dif=(sumdet("M")-sumcolpond).abs
51
+ if sumdet("M")>sumcolpond and dif>=2
52
+ salida.push("Intratensivo. Para solucionar sus problemas recurren a su mundo interno.")
53
+ elsif sumdet("M")<sumcolpond and dif>=2
54
+ salida.push("Extratensivo. Para solucionar sus problemas recurren al mundo externo")
55
+ else
56
+ salida.push("Ambigual. NO tiene un estilo defeinido. Dudan mucho entre el pensar y el actuar y se desgantan")
57
+ end
58
+ # Estilo organizativo
59
+ if (self.Zd>3)
60
+ salida.push("Estilo hiperincorporador. Minucioso al recoger información del medio, teniendo dificultades para distinguir lo importante de lo accesorio")
61
+ elsif (self.Zd<-3)
62
+ salida.push("Estilo hipoincorporador. Decide rápidamente en función de lo más llamativo. Tiende a ser rápido, pero en su precipitación puede equivocarse")
63
+ else
64
+ salida.push("Estilo organizativo normal. Registra la información de forma eficaz y organiza activamente la información de su entorno")
65
+ end
66
+ # D
67
+ if (self.D>0)
68
+ salida.push("D positivo. Buena tolerancia al estrés, utilizando bien sus recursos y respondiendo a demandas del ambiente")
69
+ elsif (self.D==0)
70
+ salida.push("D=0. Buena tolerancia al estrés, pero se puede descompensar")
71
+ else
72
+ if(self.AdjD>self.D)
73
+ salida.push("D<0 y AdjD menor. Sobrecarga situacional. Algo lo tiene sobrepasado")
74
+ else
75
+ salida.push("D<0 y AdjD igual. Tensión y sufrimiento crónico. Disposición crónica a la desorganización")
76
+ end
77
+ end
78
+ # estimulacion sufrida (es)
79
+
80
+ if eb_izq>eb_der
81
+ salida.push("FM+m aumentado. Ideas sin que el sujeto se lo proponga. Sobrecarga interna.")
82
+ if sumdet("FM")>sumdet("m")
83
+ salida.push("FM>m. Malestar crónico por necesidades insatisfechas")
84
+ elsif sumdet("m")>sumdet("FM")
85
+ salida.push("m>FM. Malestar agudo, por estresante actual")
86
+ end
87
+ elsif eb_der>eb_izq
88
+ salida.push("C'+T+V+Y aumentados. Aumento del sufrimiento y del dolor psíquico causado por situaciones internas")
89
+ else
90
+ salida.push("Necesidades y sufrimientos en igual grado")
91
+ end
92
+
93
+ if sumdet("FM")>norma(4.89)
94
+ salida.push("FM aumentada. Necesidades insatisfechas de forma crónica. Es un sujeto que quiere gratificarse ahora, puede estar a merced de sus impulsos, lo cual lo puede llevar a conductas desadaptativas")
95
+ elsif sumdet("FM")< norma(2.51)
96
+ salida.push("FM disminuido. Represión de necesidades básicas")
97
+ end
98
+
99
+ if sumdet("m")>norma(1.97)
100
+ salida.push("m aumentado. Malestar por necesidades externas agudo aumentado")
101
+ end
102
+
103
+ if sumdet("Y")>norma(1.57)
104
+ salida.push("Claroscuro difuso aumentado. Angustia, sensación de indefensión, parálisis, desamparto")
105
+ end
106
+ if self.EA>self.es+2
107
+ salida.push("EA>es+2. Sujeto tiene recursos para satisfacer sus necesiades")
108
+ elsif self.EA<self.es
109
+ salida.push("EA<es. Sujeto no tiene suficientes recursos para satisfacer sus necesidades. INHIBICION DE POTENCIAL")
110
+ else
111
+ salida.push("Recursos suficientes, pero a veces se puede desbordar. POSIBLE INHIBICION DE POTENCIAL")
112
+ end
113
+
114
+ salida.push('{\b Mediación}')
115
+
116
+ if fmas >= 0.88
117
+ salida.push("FQX% elevado. Exagerada precoupación por la realidad, en desmedro de la propia singularidad(rigidez)")
118
+ elsif fmas <= 0.54
119
+ salida.push("FQX% disminuido. Distorsión de la realidad. Puede ser creatividad, subjetividad o distorsión propiamente tal")
120
+ else
121
+ salida.push("FQX% normal. Buen control de la realidad, objetivo y con buena capacidad intelectual")
122
+ end
123
+
124
+ if xmas>=0.87
125
+ salida.push("X+% elevado. Cuando los afectos están involucrado, la persona se va a apegar mucho a la realidad y puede paralizarse")
126
+ elsif xmas<=0.71
127
+ salida.push("X+% disminuido. Cuando los afectos están involucrados, no pueden ser muy objetivos. Revisar FQXu y - para ver si es patológico o no")
128
+ else
129
+ salida.push("X+% normal. El sujeto es capaz de manejar sus afectos de modo bastante objetivo")
130
+ end
131
+
132
+ if wda<=0.75
133
+ salida.push("WDA+%<0.75. La percepción es inadecuada en situaciones obvias")
134
+ else
135
+ salida.push("WDA+%>0.75. La percepción es adecuada en situaciones obvias")
136
+ end
137
+
138
+ if xa<=0.7
139
+ salida.push("Xa%<0.7. Trastorno de percepción en situaciones inusuales")
140
+ else
141
+ salida.push("Xa%>0.7. La percepción es adecuada en situaciones inusuales")
142
+ end
143
+
144
+ if xmenos>0.25
145
+ salida.push("X-%>0.25. Preocupante alejamiento de lo convencional")
146
+ end
147
+ if smenos>0.30
148
+ salida.push("S-%>0.30. Fuerte interferencia emocional en situaciones de rabia")
149
+ end
150
+
151
+ if @populares<5
152
+ salida.push("P<5. Tiene dificultades para percibir las normas sociales(psicótico-sociópata). O puede ser muy brillante y arrogante y no quiere contestar las obvias.")
153
+ if @populares<2
154
+ salida.push("Hiciste límite, supongo...")
155
+ end
156
+ elsif @populares>=5 and @populares<=8
157
+ salida.push("5<P<8. Puede percibir y acatar las normas sociales")
158
+ else
159
+ salida.push("P>8. Sobresocializado. Demasiado atento a las normas sociales. sobresocializado")
160
+ end
161
+
162
+ salida.push('{\b Ideación}')
163
+
164
+ if(sumdet("F")>norma(10.66))
165
+ salida.push("F aumentadas. Muy defensivo, teme sus emociones y las evite")
166
+ elsif(sumdet("F")<norma(5.32))
167
+ salida.push("F disminuidas. Expresión descontrolada de los impulsos. Falta de demora cognitiva")
168
+ end
169
+ if pasivos>activos+1
170
+ salida.push("p>a+1. Persona que tiende a asumir un rol pasivo frente a los demás. Vigilar T, P, Ego disminuido y Fd")
171
+
172
+ salida.push("T>0.Pasivo por necesidad de afecto") if (sumdet('T')>0)
173
+ salida.push("P>4.Pasivo por Sobresocialización") if (@populares>4)
174
+ salida.push("Fd>0. Pasivo por dependencia") if (_c['Fd']>0)
175
+ if (sumdet("M")+sumdet("FM")+sumdet("m"))<4
176
+ salida.push("Hay pocos movimientos para estar seguro sobre la pasividad")
177
+ end
178
+
179
+ else
180
+ salida.push("a+1>p. Persona adopta rol activo")
181
+ end
182
+ if (pasivos-activos).abs>4
183
+ salida.push("Dif pasivos activos > 4. Rigidez cognitiva")
184
+ end
185
+
186
+ if _d['Mp']>_d['Ma']+1
187
+ salida.push("Mp>Ma+1. Crea fantasías, pero tiene dificultades para hacer deliberaciones eficaces. Ocupa su inteligencia para escapar de los problemas, no para afrontarlos")
188
+ salida.push("Pocos Movimientos humanos para estar seguro de esto") if sumdet("M")<2
189
+ end
190
+ if intelectualizacion>=5
191
+ salida.push("Intelectualización alta. Uso abusivo de la intelectualizacion")
192
+ end
193
+
194
+ if _ccee['MOR']>2
195
+ salida.push("MOR>2. Pesimismo")
196
+ end
197
+ if m_menos>1
198
+ salida.push("M->0. ALERTA. Mal signo. Sus recursos ideativos presentan alteraciones, con ideación paranoide.")
199
+ end
200
+ if self.SumBr6>=norma(6.17)
201
+ salida.push("SumBr6 aumentada .Posible trastorno del pensamiento. INHIBICION DEL POTENCIAL")
202
+ end
203
+ if self.SumPon6>2
204
+ salida.push("SumPon6>2.Posible trastorno del pensamiento. INHIBICION DEL POTENCIAL")
205
+ end
206
+ if msin>0
207
+ salida.push("M sin >0. Es una persona que puede desorientarse y perder contacto con la realidad")
208
+ end
209
+ #
210
+ # AFECTOS
211
+ #
212
+ salida.push('{\b Afectos}')
213
+
214
+ if det['FC']<(det['CF']+det['C'])*2
215
+ salida.push("FC<CF+C*2. Vigilar poco control sobre descarga emocional")
216
+ salida.push("C>CF. Posible impulsividad!") if det['C']>det['CF']
217
+ end
218
+
219
+ if det['C']>0
220
+ salida.push("C>0. Persona que disfruta mucho de situaciones vertiginosas. ")
221
+ end
222
+
223
+ if sumdet("C'")>det['FC']*0.5+det['CF']+det['C']*1.5
224
+ salida.push("SumC':SumPondC hacia derecha. Se internaliza en demasía la descarga afectiva. Posible somatización")
225
+ end
226
+
227
+ if self.Afr<0.53
228
+ salida.push("Afr disminuido. Evitación de situaciones emocionales. Trabaja mejor en ambientes sin carga emocional")
229
+ elsif self.Afr>0.85
230
+ salida.push("Afr umentado. Atracción por estimulación emocional. Trabaja mejor en ambientes cargados afectivamente.")
231
+ else
232
+ salida.push("Afr normal. Interés normal por estimulación emocional.")
233
+ end
234
+
235
+ if complj_r<0.2 and self.L<=1.51
236
+ salida.push("Compl/r dism y L normal. Tiende a simplificar las situaciones, aunque no de manera excesiva")
237
+ elsif complj_r<0.2 and self.L> 1.51
238
+ salida.push("Compl/r dism y L alto. Limitación de tipo intelectual o tendencia a simplificar demasiado la situación")
239
+ elsif complj_r>0.25 and self.EA>7
240
+ salida.push("Compl/r alta y muchos recursos. Buen signo. Tiene capacidad para considerar de manera integral los estímulos y buena capacidad para elaborarlos ")
241
+ elsif complj_r>0.25 and self.EA<2
242
+ salida.push("Compl/r alta y pocos recursos. Mal signo. Puede tener dificultad para controlar y puede desorganizarse")
243
+ else
244
+ salida.push("complejas normal. Capacidad normal para manejar de forma integral los estímulos")
245
+ end
246
+
247
+ if _l['S'].to_f/self.R>0.2
248
+ salida.push("S aumentado. Vigilar si es autonomía u oposicionismo")
249
+ end
250
+ #
251
+ # PROCESAMIENTO
252
+ #
253
+
254
+ salida.push('{\b Procesamiento}')
255
+ salida.push(respuestatriple(self.Zf,norma(9.22),norma(14.4),
256
+ "Zf dism. Sujeto con poco interés por organizar. Puede ser por limitación intelectual o depresión",
257
+ "Zf alto. Alto nivel de motivación , que dedican al proceso de información más energía que el promedio",
258
+ "Zf normal. Motivación e interés normal para organizar elementos del entorno")
259
+ )
260
+
261
+ if _l['W'].to_f/self.R>0.50
262
+ salida.push("W aumentadas. Gran interés por tareas de análisis y por organizar los componentes del mundo interno en un todo significativo")
263
+ elsif _l['W'].to_f/self.R<0.15
264
+ salida.push("W disminuidas. Poco interés en tareas de análisis y dificultad para integrar los elementos de su mundo interno en un todo significativo. Revisar síntomas depresivos")
265
+ end
266
+
267
+ if _l['D'].to_f/self.R>0.70
268
+ salida.push("D aumentadas. Mucho apego a lo práctico")
269
+ elsif _l['D'].to_f/self.R<0.30
270
+ salida.push("D disminuidas. Pierde sentido de lo práctico. Vigilar W y Dd")
271
+ if _l['W'].to_f/self.R>0.50
272
+ salida.push("W aum. Pierde sentido de lo práctico por irse en la volada")
273
+ elsif _l['W'].to_f/self.R>0.50
274
+ salida.push("Dd aum . Pierde sentido de lo práctico por el detalle")
275
+
276
+ else
277
+ salida.push("Revisa bien los datos, que no pude cachar el mote")
278
+ end
279
+ end
280
+
281
+ if _l['Dd'].to_f/self.R>40
282
+ salida.push("Dd aumentadas. Muy apegado a la exactitud. temor a cometer equivocaciones. Personas inseguras que se van por las ramas")
283
+ elsif _l['Dd'].to_f/self.R<0.05
284
+ salida.push("Dd disminuidas. No muy preocupada por la exactitud")
285
+ end
286
+
287
+ rel_aspir=_l['W'].to_f/sumdet('M')
288
+
289
+ if (rel_aspir> 2.5)
290
+ salida.push("W*2>M ("+rel_aspir.to_s+"); Aspiraciones sobre los recursos. El sujeto se puede frustrar")
291
+ elsif (rel_aspir<1.5)
292
+ salida.push("W*2<M ("+rel_aspir.to_s+"); Aspiraciones bajo los recursos. Los gasta en fantasías, vigilar pasividad")
293
+ else
294
+ salida.push("W*2=M ("+rel_aspir.to_s+"); Aspiraciones adecuadas a los recursos")
295
+ end
296
+ rel_teor=_l['W'].to_f / _l['D'].to_f
297
+ if (rel_teor> 2.5)
298
+ salida.push("Teórico ("+rel_teor.to_s+")")
299
+ elsif (rel_teor<1.5)
300
+ salida.push("Práctico ("+rel_teor.to_s+")")
301
+ else
302
+ salida.push("Equilibrio Teórico práctico ("+rel_teor.to_s+")")
303
+ end
304
+
305
+ if zsum<15
306
+ salida.push("ZSum<15. Poca interés en integrar")
307
+ elsif zsum>32
308
+ salida.push("ZSum>32. Alto interés en integrar")
309
+ else
310
+ salida.push("ZSum normal. Interés normal en integrar estímulos")
311
+ end
312
+ #
313
+ # INTERPERSONAL
314
+ #
315
+
316
+ salida.push('{\b Interpersonal}')
317
+ if _ccee['COP']==0 and _ccee['AG']==0
318
+ salida.push("COP y AG=0. Poco interés en relaciones interpersonales")
319
+ end
320
+ salida.push("Fd>0. Rasgos incrementados de dependencia") if _c['Fd']>0
321
+ if aislamiento_r>0.29
322
+ salida.push("Aisl>0.29. Sujeto menos implicados que el resto en lo social")
323
+ else
324
+ salida.push("Aisl normal. Sujeto implicado en lo social")
325
+ end
326
+
327
+ # a (H+Dh:A+Ad)
328
+ rel=(_c['H']+_c['Hd']).to_f/(_c['A']+_c['Ad'])
329
+ if rel<0.3
330
+ salida.push("H+Dh:A+Ad hacia animal. Persona se está aislando. No tiene interés en otros")
331
+ elsif rel>0.5
332
+ salida.push("H+Dh:A+Ad hacia humano. Persona con interés exagerado por relacionarse")
333
+ else
334
+ salida.push("H+Dh:A+Ad equilibrado. Persona con interés normal por relacionarse")
335
+ end
336
+ rel=(_c['H']+_c['A']).to_f/(_c['Hd']+_c['Ad'])
337
+ if rel<0.3
338
+ salida.push("H+A:Hd+Ad hacia parcial. Se relaciona con objetos parciales, disocia, escinde, se relaciona con partes del otro")
339
+ else
340
+ salida.push("H+A:Hd+Ad hacia total. Persona se relaciona con objetos totales")
341
+ end
342
+
343
+ if (_c['H']+_c['Hd']) >= (_c['(H)']+_c['(Hd)'])*3
344
+ salida.push("H+Hd>(H)+(hd)*3: Se relaciona a nivel concreto")
345
+ else
346
+ salida.push("H+Hd<(H)+(hd)*3: Se relaciona en la fantasía")
347
+ end
348
+
349
+ if porcentaje(_c['H']+_c['Hd'])>=0.2
350
+ salida.push("H+Hd>=20%. Capacidad e interés en relacionarse con otros")
351
+ else
352
+ salida.push("H+Hd<20%. Poca capacidad e interés en relacionarse con otros")
353
+ end
354
+ if (_c['Hd']+_c['(H)']+_c['(Hd)'])*3>_c['H']
355
+ salida.push("H<Hd+(H)+(Hd)*3: Problemas en interpersonal. Revisar protocolo para ver que pasa.")
356
+ salida.push("Puede que no sea válido, porque faltan humanos") if (_c['Hd']+_c['(H)']+_c['(Hd)']+_c['H'])<3
357
+ end
358
+ if _c['Hd']*3>_c['H']
359
+ salida.push("H<Hd*3: Angustia, depresión y fobia social. Aumenta si los Hd son perfiles de caras")
360
+ end
361
+
362
+ if a_porciento>0.47
363
+ salida.push("A% aumentado. Sujeto inmaduro, rutinario, predecible")
364
+ elsif a_porciento<0.31
365
+ salida.push("A% disminuido. Sujeto Flexible. Si es muy bajo, poco comprometido")
366
+ else
367
+ salida.push("A% normal. Buena adaptación social")
368
+ end
369
+
370
+ if @tipos_contenidos>=5
371
+ salida.push("Tipos de contenido mayor a 5. Flexibilidad intelectual y distintos intereses")
372
+ else
373
+ salida.push("Tipos de contenido menor a 5. Poca flexibilidad intelectual y pocos intereses")
374
+ end
375
+ salida.push('{\b Autopercepción}')
376
+ if autocentracion<0.32
377
+ salida.push("ego disminuido. Tiene dificultades para tomarse a sí mismo como centro de interes")
378
+ elsif autocentracion>0.46
379
+ salida.push("ego aumentado. Sujeto tiende a tomarse como centro de sus preocupaciones. Privilegia mucho su propio punto de vista. Le cuesta ser flexibles")
380
+ else
381
+ salida.push("ego normal. Capacidad normal para ser el eje de su propia atención")
382
+ end
383
+ if sumdet("V")>norma(0.84)
384
+ salida.push("Vista aumentado. Instrospección dolorosa. El sujeto se mira a si mismo con culpa")
385
+ end
386
+ if sumdet("FD")>norma(2.03)
387
+ salida.push("FD aumentada. Anormal distanciamiento del yo. Si está en terapia, es normal")
388
+ end
389
+ salida.push("Xy+An>2. Si no hay problemas físicos, trastornos de autoimagen") if an_xy>2
390
+ salida.push("MOR>2. Pesimismo") if _ccee['MOR']>2
391
+
392
+ if _c['H']>_c['(H)']+_c['Hd']+_c['(Hd)']
393
+ salida.push("H>(H)+Hd+(Hd). Percepción realista de sí mismo")
394
+ else
395
+ salida.push("H<(H)+Hd+(Hd). Percepción no realista de sí mismo")
396
+ end
397
+
398
+ #
399
+ # POTENCIAL INTELECTUAL
400
+ #
401
+ salida.push('{\b Potencial intelectual}')
402
+ salida.push("Revisa que los valores estén sobre, en o bajo el promedio")
403
+ salida.push(respuestatriple(self.R, 18.44, 26.9,
404
+ "R disminuida. Signo de potencial bajo",
405
+ "R aumentada. Signo de potencial superior",
406
+ "R normal. Signo de potencial normal"))
407
+ salida.push(respuestatriple(fmas, 0.54, 0.88,
408
+ "F+% disminuido. Signo de potencial bajo",
409
+ "F+% aumentado. Signo de potencial normal, pero posiblemente bajo",
410
+ "F+% normal. Signo de potencial normal o superior"))
411
+ salida.push(respuestatriple(xmas, 0.71, 0.87,
412
+ "X+% disminuido. Signo de potencial bajo",
413
+ "X+% aumentado. Signo de potencial normal, pero posiblemente bajo",
414
+ "X+% normal. Signo de potencial normal o superior"))
415
+ salida.push(respuestatriple(@frecuencias['dq']['+'], 5.15,9.47,
416
+ "DQ+ disminuido. Signo de potencial normal o bajo",
417
+ "DQ+ aumentado. Signo de potencial alto",
418
+ "DQ+ normal. Signo de potencial normal"))
419
+ salida.push(respuestatriple(@frecuencias['fqx']['+'], 0,1.82,
420
+ "FQX+ disminuido. Signo de potencial normal o bajo",
421
+ "FQX+ aumentado. Signo de potencial alto",
422
+ "FQX+ normal. Signo de potencial normal"))
423
+ salida.push(respuestatriple(@frecuencias['dq']['v'], 0.04,2.56,
424
+ "DQv disminuido. Signo de potencial normal",
425
+ "DQv aumentado. Signo de potencial bajo",
426
+ "DQv normal. Signo de potencial normal"))
427
+ salida.push(respuestatriple(@frecuencias['dq']['v/+'], 0,1.07,
428
+ "DQv disminuido. Signo de potencial normal",
429
+ "DQv aumentado. Signo de potencial bajo",
430
+ "DQv normal. Signo de potencial normal"))
431
+
432
+ #salida.collect {|a|
433
+ # Iconv.conv('ISO-8859-1','UTF-8',a)
434
+ #}
435
+ salida
436
+ end
437
+ end
438
+ end
@@ -0,0 +1,36 @@
1
+ # encoding: UTF-8
2
+ module Exner
3
+ class Rorschach
4
+ public
5
+ def obs(lista=false)
6
+ total=0
7
+ cons={
8
+ 1=>localizaciones['Dd']>3,
9
+ 2=>(self.Zf>12),
10
+ 3=>(self.Zd>3),
11
+ 4=>(@populares>7),
12
+ 5=>(_f['fqx']['+']>1),
13
+
14
+ }.each {|n,r|
15
+ total+=1 if r
16
+ }
17
+ lista ? cons : total
18
+ end
19
+ def obs_si
20
+ return (obs_si_bool) ? 'Sí':'No'
21
+ end
22
+ def obs_si_bool
23
+ return true if obs==5
24
+ return true if (obs>=3 and xmas>0.89)
25
+ return true if (_f['fqx']['+']>3 and xmas>0.89)
26
+ l=obs(true)
27
+
28
+ return true if ((bi(l[1])+bi(l[2])+bi(l[3])+bi(l[4]))>=2 and _f['fqx']['+']>3)
29
+ false
30
+ end
31
+ private
32
+ def bi(v)
33
+ v ? 1: 0
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+ module Exner
3
+ class Rorschach
4
+ public
5
+ def scon(lista=false)
6
+ det=@frecuencias['determinantes']
7
+ total=0
8
+ cons={
9
+ 1=>sumdet('V')+det['FD']>2,
10
+ 2=>scon_col_sombra>0,
11
+ 3=>(aislamiento_r<0.31 or aislamiento_r>0.44),
12
+ 4=>@frecuencias['ccee']['MOR']>3,
13
+ 5=> (self.Zd > 3.5 or self.Zd < -3.5) ,
14
+ 6=>es>self.EA,
15
+ 7=>det['CF']+det['C']>det['FC'],
16
+ 8=>xmas<0.7,
17
+ 9=>localizaciones['S']>3,
18
+ 10=>(@populares<3 or @populares>8),
19
+ 11=>@frecuencias['contenidos']['H']<2,
20
+ 12 => self.R<17
21
+ }.each {|n,r|
22
+ total+=1 if r
23
+ }
24
+ lista ? cons : total
25
+
26
+ end
27
+ def scon_si
28
+ return (scon>7) ? 'Sí':'No'
29
+ end
30
+ private
31
+ def scon_col_sombra
32
+ suma=0
33
+ @respuestas.each {|n,resp|
34
+ cond1=cond2=false
35
+ resp.determinantes.each {|d|
36
+ cond1=true if d=~/Y/
37
+ cond2=true if d=='FC' or d=='CF' or d=='C'
38
+ }
39
+ suma=+1 if cond1 and cond2
40
+ }
41
+ suma
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: UTF-8
2
+ module Exner
3
+ class Rorschach
4
+ public
5
+ def sczi(lista=false)
6
+ det=@frecuencias['determinantes']
7
+ fq=@frecuencias['fqx']
8
+ total=0
9
+ cons={
10
+ 1=>((xmas<0.61 and smenos<0.41) or xmas<0.50),
11
+ 2=>xmenos>0.29,
12
+ 3=>((fq['-']>fq['u'])or(fq['-']>fq['o']+fq['+'])),
13
+ 4=>(nvl2>1 and @frecuencias['ccee']['FABCOM2']>0),
14
+ 5=>(self.SumBr6>6 or self.SumPon6>17),
15
+ 6=>(@frecuencias['mq']['-']>1 or xmenos>0.4),
16
+ }.each {|n,r|
17
+ total+=1 if r
18
+ }
19
+ lista ? cons : total
20
+ end
21
+ def sczi_si
22
+ return (sczi > 3) ? 'Sí':'No'
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,69 @@
1
+ require 'erb'
2
+ module Exner
3
+ module Rtf
4
+ module Rorschach
5
+ def _dcp(c)
6
+ _ds[c.gsub('C',"C'")]
7
+ end
8
+ def _cd(c)
9
+ c+" = "+_f['contenidos_1'][c].to_s+","+_f['contenidos_2'][c].to_s
10
+ end
11
+ def detRtf
12
+ s=""
13
+ @respuestas.each {|n,r|
14
+ s+="\n\\par "+r.determinantes.join('.')+r.fq if r.determinantes.size>1
15
+ }
16
+ s
17
+ end
18
+ def _ds
19
+ determinantes_simples
20
+ end
21
+ def superscript(a)
22
+ '{{\*\updnprop5801}\up8 '+a+'}'
23
+ end
24
+ def _res_enf
25
+ a=resumen_del_enfoque.collect {|lam|
26
+ Exner.a_romano(lam[0])+":"+lam[1].join(',')
27
+ }.join("\n\\par ")+"\n"
28
+ end
29
+ def _lq(tipo)
30
+ s=''
31
+ Exner::FQ_VALIDAS.each {|fq|
32
+ s+=fq+":"+_f[tipo][fq].to_s+"\n\\par "
33
+ }
34
+ s
35
+ end
36
+ def ldq
37
+ s=''
38
+ Exner::DQ_VALIDAS.each {|dq|
39
+ s+=dq+":"+_f['dq'][dq].to_s+"\n\\par "
40
+ }
41
+ s
42
+ end
43
+ def aParrafos(array)
44
+ array.collect {|x|
45
+ "\n\\par "+x.to_s
46
+ }
47
+ end
48
+ def self.process(text)
49
+ t=Exner::Rorschach.new
50
+ t.open_stream(text)
51
+ t.procesar
52
+ t.extend(Exner::Rtf::Rorschach)
53
+ template=File.read(Exner.dir_data+'/sumario_Rorschach.rtf')
54
+ zz=t
55
+ ERB.new(template).result(binding)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ #$t= Exner::Rorschach.new
61
+ #$t.open_file(ARGV[0])
62
+ #$t.procesar
63
+ #$t.extend(ExnerRtf)
64
+ #template=''
65
+ #File.open(Exner.dir_root+'/sumario_Rorschach.rtf','r') {|afile| afile.each_line #{|l|
66
+ # template+=l
67
+ #
68
+ #}}
69
+ #puts ERB.new(template).result
@@ -0,0 +1,59 @@
1
+ require 'erb'
2
+ module Exner
3
+ module Rtf
4
+ module Zulliger
5
+ def _dcp(c)
6
+ _ds[c.gsub('C',"C'")]
7
+ end
8
+ def _cd(c)
9
+ c+" = "+_f['contenidos_1'][c].to_s+","+_f['contenidos_2'][c].to_s
10
+ end
11
+ def detRtf
12
+ s=""
13
+ @respuestas.each {|n,r|
14
+ s+="\n\\par "+r.determinantes.join('.')+r.fq if r.determinantes.size>1
15
+ }
16
+ s
17
+ end
18
+ def _ds
19
+ determinantes_simples
20
+ end
21
+ def superscript(a)
22
+ '{{\*\updnprop5801}\up8 '+a+'}'
23
+ end
24
+ def _res_enf
25
+ a=resumen_del_enfoque.collect {|lam|
26
+ Exner.a_romano(lam[0])+":"+lam[1].join(',')
27
+ }.join("\n\\par ")+"\n"
28
+ end
29
+ def _lq(tipo)
30
+ s=''
31
+ Exner::FQ_VALIDAS.each {|fq|
32
+ s+=fq+":"+_f[tipo][fq].to_s+"\n\\par "
33
+ }
34
+ s
35
+ end
36
+ def ldq
37
+ s=''
38
+ Exner::DQ_VALIDAS.each {|dq|
39
+ s+=dq+":"+_f['dq'][dq].to_s+"\n\\par "
40
+ }
41
+ s
42
+ end
43
+ def aParrafos(array)
44
+ array.collect {|x|
45
+ "\n\\par "+x.to_s
46
+ }.join("")
47
+ end
48
+ def self.process(text)
49
+ t=Exner::Zulliger.new
50
+ t.open_stream(text)
51
+ t.procesar
52
+ t.extend(Exner::Rtf::Zulliger)
53
+ template=File.read(Exner.dir_data+'/sumario_Zulliger.rtf')
54
+ zz=t
55
+ ERB.new(template).result(binding)
56
+ end
57
+ end
58
+ end
59
+ end