- Offizieller Beitrag
Wer mal mit KV-Software (Krankenversicherung) zu tun hat, kann evtl. folgende Funktionen gebrauchen.
AutoIt
#include <Date.au3>
;===============================================================================
; Function Name...: _PLZ_OstWest
; Description.....: Prüft, ob eine PLZ im Bereich Ost oder West liegt
; Parameter(s)....: $_iPLZ Die zu prüfende PLZ
; Return Value(s).: '9' - wenn PLZ in Region Ost, sonst '1'
; Note............: Der Returnwert orientiert sich an den Regionalkennungen für den Versicherungsstatus.
; Author(s).......: BugFix
;===============================================================================
Func _PLZ_OstWest($_iPLZ)
Local Static $aPLZOst[][2] = [ _
[01001,01936],[01941,01998],[02601,02999],[03001,03253],[04001,04579],[04581,04639],[04641,04889], _
[04891,04938],[06001,06548],[06551,06578],[06601,06928],[07301,07950],[07920,07980],[07982,07982],[07985,07989], _
[08001,09669],[10115,10115],[10117,10117],[10119,10119],[10178,10179],[10243,10243],[10245,10245],[10247,10247], _
[10249,10249],[10315,10315],[10317,10319],[10365,10365],[10367,10367],[10369,10369],[10405,10405],[10407,10407], _
[10409,10409],[10435,10435],[10437,10437],[10439,10439],[12435,12435],[12437,12437],[12439,12439],[12459,12459], _
[12487,12487],[12489,12489],[12524,12524],[12526,12527],[12555,12555],[12557,12557],[12559,12559],[12587,12587], _
[12589,12589],[12619,12619],[12621,12621],[12623,12623],[12627,12627],[12629,12629],[12679,12679],[12681,12681], _
[12683,12683],[12685,12685],[12687,12687],[12689,12689],[13051,13051],[13053,13053],[13055,13055],[13057,13057], _
[13059,13059],[13086,13086],[13088,13089],[13125,13125],[13127,13127],[13129,13129],[13156,13156],[13158,13159], _
[13187,13187],[13189,13189],[14401,14715],[14723,16949],[17258,17258],[17001,17256],[17258,17259],[17261,17291], _
[17301,17322],[17326,17326],[17328,17331],[17335,17335],[17337,19260],[19307,19357],[19273,19306],[19357,19417], _
[23921,23999],[29401,29416],[36401,36469],[37301,37359],[38481,38489],[38801,39649],[96501,96529],[98501,99998]]
For $i = 0 To UBound($aPLZOst) -1
If $_iPLZ >= $aPLZOst[$i][0] And $_iPLZ <= $aPLZOst[$i][1] Then Return '9'
Next
Return '1'
EndFunc ;==>_PLZ_OstWest
;===============================================================================
; Function Name...: _CheckRente
; Description.....: Prüft, ob mit dem Geburtsdatum aktuell das Rentenalter erreicht ist
; Parameter(s)....: $_sGebDat Das Geburtsdatum als 'TT.MM.JJJJ'
; Return Value(s).: True oder False
; Author(s).......: BugFix
;===============================================================================
Func _CheckRente($_sGebDat)
Local Static $aAge[][3] = [ _ ; [Geburtsjahr,Renteneintritt-Jahre,Renteneintritt-plus-Monate]
[1949,65,3],[1950,65,4],[1951,65,5],[1952,65,6],[1953,65,7],[1954,65,8],[1955,65,9],[1956,65,10], _
[1957,65,11],[1958,66,0],[1959,66,2],[1960,66,4],[1961,66,6],[1962,66,8],[1963,66,10]] ; ab GebJahr 1964 = 67 Jahre
Local $JJJJ = StringRight($_sGebDat, 4), $MM = StringMid($_sGebDat, 4, 2)
If $JJJJ < 1949 Then Return True
Local $sDate
; Renteneintritt ist am ersten des Monats in dem das Rentenalter erreicht wird, daher rechne ich auch beim GebDat mit '01.'
If $JJJJ <= 1963 Then
For $i = 0 To UBound($aAge) -1
If $aAge[$i][0] = $JJJJ Then
$sDate = _DateAdd('Y', $aAge[$i][1], StringFormat('%s/%s/01', $JJJJ, $MM))
$sDate = _DateAdd('M', $aAge[$i][2], $sDate)
If _DateDiff('M', $sDate, StringFormat('%s/%s/01', @YEAR, @MON)) > -1 Then Return True
EndIf
Next
Else
$sDate = _DateAdd('Y', 67, StringFormat('%s/%s/01', $JJJJ, $MM))
If _DateDiff('M', $sDate, StringFormat('%s/%s/01', @YEAR, @MON)) > -1 Then Return True
EndIf
Return False
EndFunc ;==>_CheckRente
;===============================================================================
; Function Name...: _MakeStatus
; Description.....: Erstellt den altersgemäßen und wohnortabhängigen Standard-Versicherungsstatus.
; Parameter(s)....: $_iPLZ PLZ Wohnort
; Parameter(s)....: $_sGebDat Das Geburtsdatum als 'TT.MM.JJJJ'
; Return Value(s).: Standard-Versicherungsstatus
; Note............: Nicht berücksichtigt wird, dass Familienversicherung ('3') auch bei Personen,
; ................: die bereits 18 und älter sind, vorhanden sein kann. Ebenso werden
; ................: spezielle Kennungen für Hausarztprogramme etc. außer Acht gelassen.
; Author(s).......: BugFix
;===============================================================================
Func _MakeStatus($_iPLZ, $_sGebDat)
Local $sRegion = _PLZ_OstWest($_iPLZ), $sRente
If _CheckRente($_sGebDat) Then
$sRente = '5'
Else
If _DateDiff('Y', StringRegExpReplace($_sGebDat, '(\d\d)\.(\d\d)\.(\d{4})', '\3/\2/\1'), _
StringFormat('%s/%s/%s', @YEAR, @MON, @MDAY)) < 18 Then
$sRente = '3'
Else
$sRente = '1'
EndIf
EndIf
Return StringFormat('%s000%s', $sRente, $sRegion)
EndFunc ;==>_MakeStatus
Alles anzeigen