Skip to content

Commit 3becfc8

Browse files
committed
Add materialization: PensionableFromBirthdate
1 parent b68687d commit 3becfc8

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

sozialplattform/materialization.ttl

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
2+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
3+
@prefix ff: <https://foerderfunke.org/default#> .
4+
5+
# MATERIALIZATION RULES
6+
7+
ff:CalculateAgeFromBirthdate a ff:MaterializationRule, ff:SparqlRule ;
8+
rdfs:label "Berechnung des Alters basierend auf dem Geburtsdatum"@de, "Calculate the age from the birthdate"@en ;
9+
ff:input ff:geburtsdatum ;
10+
ff:output ff:hasAge ;
11+
ff:sparqlConstructQuery """
12+
PREFIX ff: <https://foerderfunke.org/default#>
13+
CONSTRUCT {
14+
?person ff:hasAge ?age .
15+
} WHERE {
16+
?person ff:geburtsdatum ?bday .
17+
BIND(YEAR(NOW()) - YEAR(?bday) - IF(MONTH(NOW()) < MONTH(?bday) || (MONTH(NOW()) = MONTH(?bday) && DAY(NOW()) < DAY(?bday)), 1, 0) AS ?age) .
18+
}
19+
""" .
20+
21+
ff:PensionableFromBirthdate a ff:MaterializationRule, ff:SparqlRule ;
22+
rdfs:label "Feststellung der Pensionsberechtigung basierend auf dem Geburtsdatum"@de, "Determining qualification for pension from the birthdate"@en ;
23+
ff:input ff:geburtsdatum ;
24+
ff:output ff:isPensionable ;
25+
ff:sparqlConstructQuery """
26+
PREFIX ff: <https://foerderfunke.org/default#>
27+
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
28+
CONSTRUCT {
29+
?person ff:pensionable ?pensionable .
30+
} WHERE {
31+
?person ff:geburtsdatum ?bday .
32+
BIND(YEAR(?bday) AS ?birthYear) BIND(MONTH(?bday) AS ?birthMonth) BIND(DAY(?bday) AS ?birthDay)
33+
OPTIONAL {
34+
?yearRow ff:appliesToBirthYear ?birthYear ;
35+
ff:hasPensionAgeYears ?pensionAgeYears ;
36+
ff:hasPensionAgeMonths ?pensionAgeMonths .
37+
}
38+
BIND(COALESCE(?pensionAgeYears, 67) AS ?finalPensionAgeYears)
39+
BIND(COALESCE(?pensionAgeMonths, 0) AS ?finalPensionAgeMonths)
40+
BIND(?birthYear + ?finalPensionAgeYears AS ?pensionYear)
41+
BIND(?birthMonth + ?finalPensionAgeMonths AS ?monthsSum)
42+
BIND(IF(?monthsSum > 12, ?monthsSum - 12, ?monthsSum) AS ?pensionMonth)
43+
BIND(IF(?monthsSum > 12, ?pensionYear + 1, ?pensionYear) AS ?adjustedPensionYear)
44+
BIND(CONCAT(
45+
STR(?adjustedPensionYear), "-",
46+
IF(STRLEN(STR(?pensionMonth)) = 1, CONCAT("0", STR(?pensionMonth)), STR(?pensionMonth)), "-",
47+
IF(STRLEN(STR(?birthDay)) = 1, CONCAT("0", STR(?birthDay)), STR(?birthDay)),
48+
"T00:00:00"
49+
) AS ?pensionDateStr)
50+
BIND(xsd:dateTime(?pensionDateStr) AS ?pensionDate)
51+
BIND(IF(NOW() >= ?pensionDate, true, false) AS ?pensionable)
52+
}
53+
""" .
54+
55+
ff:PensionAgeTable a ff:TableOfConstants ;
56+
ff:hasRow ff:Year1947 ; ff:hasRow ff:Year1948 ; ff:hasRow ff:Year1949 ; ff:hasRow ff:Year1950 ; ff:hasRow ff:Year1951 ;
57+
ff:hasRow ff:Year1952 ; ff:hasRow ff:Year1953 ; ff:hasRow ff:Year1954 ; ff:hasRow ff:Year1955 ; ff:hasRow ff:Year1956 ;
58+
ff:hasRow ff:Year1957 ; ff:hasRow ff:Year1958 ; ff:hasRow ff:Year1959 ; ff:hasRow ff:Year1960 ; ff:hasRow ff:Year1961 ;
59+
ff:hasRow ff:Year1962 ; ff:hasRow ff:Year1963 ; ff:hasRow ff:Year1964 .
60+
ff:Year1947 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 0 ; ff:appliesToBirthYear 1947 .
61+
ff:Year1948 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 1 ; ff:appliesToBirthYear 1948 .
62+
ff:Year1949 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 2 ; ff:appliesToBirthYear 1949 .
63+
ff:Year1950 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 3 ; ff:appliesToBirthYear 1950 .
64+
ff:Year1951 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 4 ; ff:appliesToBirthYear 1951 .
65+
ff:Year1952 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 5 ; ff:appliesToBirthYear 1952 .
66+
ff:Year1953 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 6 ; ff:appliesToBirthYear 1953 .
67+
ff:Year1954 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 7 ; ff:appliesToBirthYear 1954 .
68+
ff:Year1955 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 8 ; ff:appliesToBirthYear 1955 .
69+
ff:Year1956 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 9 ; ff:appliesToBirthYear 1956 .
70+
ff:Year1957 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 10 ; ff:appliesToBirthYear 1957 .
71+
ff:Year1958 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 11 ; ff:appliesToBirthYear 1958 .
72+
ff:Year1959 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 0 ; ff:appliesToBirthYear 1959 .
73+
ff:Year1960 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 2 ; ff:appliesToBirthYear 1960 .
74+
ff:Year1961 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 4 ; ff:appliesToBirthYear 1961 .
75+
ff:Year1962 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 6 ; ff:appliesToBirthYear 1962 .
76+
ff:Year1963 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 8 ; ff:appliesToBirthYear 1963 .
77+
ff:Year1964 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 10 ; ff:appliesToBirthYear 1964 .

0 commit comments

Comments
 (0)