knitr::opts_chunk$set(echo = FALSE, results = 'asis')
### # init table of abbreviation
r6ob_abbrtable <- rmddochelper::R6ClassTableAbbrev$new()
r6ob_abbrtable$setColHeader(pvColHeader = c("Abkürzung","Bedeutung"))
r6ob_abbrtable$setQuote(pbQuote = FALSE)
sOdgDirWin <- 'odg\\ATDA-ProjectPlan'
sOdgDir <- "odg/ATDA-ProjectPlan"
sFigDirOut <- "."
sConvCmdStem <- ifelse(.Platform$OS.type == "windows", 
                       '"C:/Program Files (x86)/LibreOffice 5/program/soffice" --headless --convert-to pdf',
                       "soffice --headless --convert-to pdf")

convertOdgToPdf <- function(psOdgFile){
  sFigFile <- ifelse(.Platform$OS.type == "windows",
                     paste(sOdgDirWin, psOdgFile, sep = "\\"),
                     file.path(sOdgDir, psOdgFile))
  sConvCommand <- paste(sConvCmdStem, sFigFile)
  system(command = sConvCommand)
  sPdfFile <- gsub("odg$", "pdf", psOdgFile)
  sFigOutFile <- file.path(sFigDirOut, sPdfFile)
  file.rename(from = sPdfFile, sFigOutFile)
}

# LibreOffice draw files
#vOdgFiles <- list.files(path = sOdgDir, pattern = ".odg$")
#sapply(vOdgFiles, convertOdgToPdf)
# LibreOffice calc files
#vOdsFiles <- list.files(path = sOdgDir, pattern = ".ods$")
#sapply(vOdsFiles, convertOdgToPdf)
#' reference Class for section counting
sectionCount <- setRefClass(Class   = "SectionCount",
                            fields  = list(nSectionCount       = "numeric",
                                           nSubSectionCount    = "numeric", 
                                           nSubSubsectionCount = "numeric",
                                           sHash               = "character",
                                           sCountSep           = "character"),
                            methods = list(
                              init = function(){
                                nSectionCount       <<- 0
                                nSubSectionCount    <<- 0
                                nSubSubsectionCount <<- 0
                                sCountSep           <<- "."
                              },
                              setHash = function(psHash){
                                sHash <<- psHash
                              },
                              incrSectionCounts = function(){
                                nNrHash <- nchar(sHash)
                                if (nNrHash == 3){
                                  nSubSubsectionCount <<- nSubSubsectionCount + 1
                                } else if(nNrHash == 2){
                                  nSubSectionCount <<- nSubSectionCount + 1
                                  nSubSubsectionCount <<- 0
                                } else if(nNrHash == 1){
                                  nSectionCount <<- nSectionCount + 1
                                  nSubSubsectionCount <<- 0
                                  nSubSectionCount <<- 0
                                }
                              },
                              sGetSectionNumber = function(){
                                sSectionNumberResult <- NULL
                                if (nSectionCount > 0) 
                                  sSectionNumberResult <- as.character(nSectionCount)
                                if (nSubSectionCount > 0)
                                  sSectionNumberResult <- paste(sSectionNumberResult,
                                                                as.character(nSubSectionCount),
                                                                sep = sCountSep)
                                if (nSubSubsectionCount > 0)
                                  sSectionNumberResult <- paste(sSectionNumberResult,
                                                                as.character(nSubSubsectionCount),
                                                                sep = sCountSep)
                                return(sSectionNumberResult)
                              }
                            ))


#' Reference class for automatically enumerating section titles
SectionEnumerator <- setRefClass(Class   = "SectionEnumerator",
                                 fields  = list(sUnNumSection     = "character",
                                                rcSectionCount    = "SectionCount",
                                                sHash             = "character",
                                                sRemCaption       = "character",
                                                sNumCaptionResult = "character",
                                                sSectionSplit     = "character",
                                                nNrHash           = "numeric"
                                                ),
                                 methods = list(
                                   initSectionEnumerator = function(){
                                     sUnNumSection     <<- ""
                                     sHash             <<- ""
                                     sRemCaption       <<- ""
                                     sNumCaptionResult <<- ""
                                     sSectionSplit     <<- " "
                                     rcSectionCount$init()
                                   },
                                   setUnNumSection = function(psUnNumSection){
                                     sUnNumSection <<- psUnNumSection
                                   },
                                   parseUnNumSection = function(){
                                     vecUnNumCaption <- unlist(strsplit(sUnNumSection,sSectionSplit))
                                     sHash <<- vecUnNumCaption[1]
                                     nNrHash <<- nchar(sHash)
                                     sRemCaption <<- paste0(vecUnNumCaption[2:length(vecUnNumCaption)], 
                                                            collapse = " ")
                                     rcSectionCount$setHash(psHash = sHash)
                                     rcSectionCount$incrSectionCounts()
                                     sNumCaptionResult <<- paste(sHash,
                                                                 rcSectionCount$sGetSectionNumber(),
                                                                 sRemCaption)

                                   },
                                   displayNumSection = function(){
                                     cat(sNumCaptionResult, "\n")  
                                   }
                                 ))
# construct SectionEnumerator obj
objSecEnum <- SectionEnumerator$new()
objSecEnum$initSectionEnumerator()

Qualitas Logo

\fcolorbox{black}{white}{ \parbox[t]{1.0\linewidth}{ \centering \fontsize{12pt}{20pt}\selectfont % The first argument for fontsize is the font size of the text and the second is the line spacing - you may need to play with these for your particular title \vspace*{0.5cm} % Space between the start of the title and the top of the grey box

    \hfill Projektplan - Entwurf    % put this text right adjusted

    \vspace*{0.5cm} % Space between the end of the title and the bottom of the grey box
}

}

\vspace*{0.5cm}

\fcolorbox{black}{white}{ \parbox[t]{1.0\linewidth}{ \centering \fontsize{25pt}{40pt}\selectfont % \vspace*{0.7cm} ATDA-ASRr r6ob_abbrtable$add_abbrev(psAbbrev = "ATDA-ASR", psMeaning = "Projekt von ASR zur Automatisierung des Tierdatenaustauschs", pbOut = FALSE) \ Automatisierter Tierdatenaustausch \ zwischen Melksystemen und ARGUS \

    \vspace*{0.7cm} % Space between the end of the title and the bottom of the grey box
}

}

\vspace*{1cm}

\begin{center} \includegraphics[width=0.5\textwidth]{png/Pedigree.png} \end{center}

\vspace{5ex} {\centering \small \hfill \begin{tabular}{ll} Peter von Rohr & Sarah Görlich \ FB EDV, Qualitas AG & AG ZDL, ASR \ \verb+http://www.qualitasag.ch+ & \verb+http://www.asr-ch.ch+ \ \verb+peter.vonrohr@qualitasag.ch+ & \verb+sarah.goerlich@qualitasag.ch+ \end{tabular} } r r6ob_abbrtable$add_abbrev(psAbbrev = "FB EDV", psMeaning = "Fachbereich elektronische Datenverarbeitung", pbOut = FALSE)

\pagebreak

\tableofcontents

\pagebreak

r6objDocStat <- rmddochelper::R6ClassDocuStatus$new()
r6objDocStat$setStatusColnames(psStatusColnames = c("Version", "Datum", "Wer","Status", "Projekt"))
#r6objDocStat$setProject(psProject = "ATDA-ASR")
# r6objDocStat$setVersion(psVersion = "0.1.005")
# r6objDocStat$setStatus(psStatus = "Ergänzungen aufgrund der Antwort von BvL")
#r6objDocStat$setVersion(psVersion = "0.1.006")
#r6objDocStat$setStatus(psStatus = "Abgrenzung von `ATDA-ASR` zu möglichen Folgeprojekten")
#r6objDocStat$setDate(psDate = "2016-06-30")
r6objDocStat$set_current_status(psVersion = "0.1.007",
                                psStatus = "Ergänzung aufgrund Infos von JV",  
                                psDate = "2016-10-18", 
                                psProject = "ATDA-ASR")
r6objDocStat$set_current_status(psVersion = "0.1.008",
                                psStatus = "Anpassungen Kooperation VSM",  
                                psDate = "2016-11-21", 
                                psProject = "ATDA-ASR")
r6objDocStat$set_current_status(psVersion = "0.1.009",
                                psStatus = "Projektplan Q1/2017",  
                                psDate = "2016-11-23", 
                                psProject = "ATDA-ASR")
r6objDocStat$include_doc_stat(psTitle = "# Dokumentenstatus")

\pagebreak

Erklärung

Dieses Dokument enthält einen Planungsentwurf für das Projekt zum r r6ob_abbrtable$add_abbrev(psAbbrev = "ATDA", psMeaning = "Automatisierter Tierdatenaustausch", pbOut = TRUE, psShowText = "automatisierten Tierdatenaustausch"), welches von der r r6ob_abbrtable$add_abbrev(psAbbrev = "AG ZT DL", psMeaning = "Arbeitsgruppe zuchttechnische Dienstleistungen") der r r6ob_abbrtable$add_abbrev(psAbbrev = "ASR", psMeaning = "Arbeitsgemeinschaft Schweizerischer Rinderzüchter") in Auftrag gegeben wurde.

Die Umsetzung dieses Projektes hängt sehr stark von den technischen Gegebenheiten der Anbieter von Melkanlagen ab. Deshalb ist der Projektplan in gewissen Abschnitten noch nicht sehr konkret gefasst. Dies ist eine bewusste Entscheidung, welche die Offenheit und die Flexibilität unsererseits demonstrieren soll. Das erste Informationstreffen mit den Anbietern von Melkanlagen fand am 18. März 2016 statt. Diese Treffen hat uns erste Informationen zum möglichen Rahmen dieses Projekts aus Sicht der Melkanlagenanbieter geliefert. Am 19.05.2016 informierten wir uns bei Bert van't Land von CRVr r6ob_abbrtable$add_abbrev(psAbbrev = "CRV", psMeaning = "Cooperative Cattle Improvement", pbOut = FALSE) über die aktuelle Situation des automatisierten Datenaustauschs in Holland. Er verwies uns an r r6ob_abbrtable$add_abbrev(psAbbrev = "JV", psMeaning = "Johan Vloet") von VSM. Er beschrieb uns am 17.10.2016 die Funktionalitäten der Software von VSM, welche beim Datenaustausch in Holland und mittlerweile auch anderen Ländern zum Einsatz kommt. Die Softwareprogramme von VSM setzen den Datenexport ab den Melksystemen und den Transfer der exportierten Daten zu einer zentralen Datenbank um. Gemäss JV besteht die Möglichkeit, dass die Lösung aus Holland auch in der Schweiz umgesetzt werden kann.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Ausgangslage")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()
objSecEnum$setUnNumSection(psUnNumSection = 
"## Aktuelle Situation betreffend Datenaustausch")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die Standardprozedur für den Transfer von Milchleistungsdaten von Betrieben, welche sich bei der r r6ob_abbrtable$add_abbrev(psAbbrev = "MLP", psMeaning = "Milchleistungsprüfung") der Zuchtverbände (BVCHr r6ob_abbrtable$add_abbrev(psAbbrev = "BVCH", psMeaning = "Braunvieh Schweiz", pbOut = FALSE) und SHBr r6ob_abbrtable$add_abbrev(psAbbrev = "SHB", psMeaning = "Swissherdbook", pbOut = FALSE)) beteiligen, sieht so aus, dass ein Milchkontrolleur alle 31 bis 37 Tage Milchproben zieht und Milchwägungen vornimmt. Die Milchmengen werden während der Kontrolle auf dem Betrieb manuell auf vorgedruckte Formulare (Begleitscheine) eingetragen. Die ausgefüllten Formulare werden dann an die Zuchtorganisationen geschickt und dort per Scanner in das Informationssystem (ARGUSr r6ob_abbrtable$add_abbrev(psAbbrev = "ARGUS", psMeaning = "Informationssystem für brunaNet, redonline+, etc ", pbOut = FALSE)) von Qualitas eingelesen.

Das nachfolgende Schaubild stellt den Datenfluss anlässlich einer Milchkontrolle auf einem Betrieb schematisch dar. Der Datenfluss verläuft gemäss der Reihenfolge der Nummern. Monatlich besucht ein Kontrolleur die ihm zugewiesenen Betriebe. Während des Besuchs werden die Milchmengen der laktierenden Kühe gemessen und auf dem Begleitschein festgehalten. Zwecks Bestimmung der Milchinhaltsstoffe zieht der Kontrolleur Milchproben und schickt diese an das Milchlabor. Die ausgefüllten Begleitscheine werden an die ZO geschickt. Dort werden diese eingescannt und die Daten werden in ARGUS abgelegt. Die erfassten Daten werden online oder per Postversand an die Betriebe zurückgemeldet.

rmddochelper::insertOdgAsPdf(psOdgFileStem = "Diagramm_Milchdatenfluss", psOdgDir = "odg/ATDA-ProjectPlan")

r r6ob_abbrtable$add_abbrev(psAbbrev = "BBB", psMeaning = "Blinden- und Behindertenzentrum Bern", pbOut = FALSE)

Betriebe mit Robotermelkanlagen (AMSr r6ob_abbrtable$add_abbrev(psAbbrev = "AMS", psMeaning = "Automatische Melksysteme", pbOut = FALSE)) oder mit Melkständen, bei welchen die Milchmengen durch ein Informationssystem vollautomatisch erfasst werden, unterliegen bezüglich des Datentransfers der gleichen Standardprozedur, mit Ausnahme, dass die Milchmengen nicht von den Kontrolleuren gemessen werden, sondern aus dem Informationssystem der Melkanlage abgerufen werden. Die Milchmengendaten werden vom Kontrolleur manuell vom Informationssystem der Melkanlage auf das Formular übertragen. Dieses Formular wird bei der Zuchtorganisation eingescannt. Die manuelle Übertragung der Daten auf das Formular ist

Ein Ziel dieses Projektes ist, die manuelle Datenübertragung durch eine direkte elektronische Übertragung der Milchmengendaten zwischen dem Informationssystem der Melkanlage und dem Informationssystem von Qualitas (ARGUS) zu ersetzen.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Terminologie und Gültigkeitsbereich")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()
objSecEnum$setUnNumSection(psUnNumSection = 
"### Melkanlage")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Als zwingende Voraussetzung damit ein Betrieb in diesem Projekt berücksichtigt werden kann, ist eine Melkanlage, welche mindestens die Menge jedes Gemelks misst und diese Messung in einem Informationssystem dauerhaft abspeichert. Diese Voraussetzung dürfte von Robotermelkanlagen (AMS) und von gewissen Melkständen erfüllt sein. Als Konvention werden von nun an Robotermelkanlagen und Melkstände, welche die Voraussetzung der Erfassung und Speicherung der Milchmengendaten erfüllen, als Melkanlagen bezeichnet.

objSecEnum$setUnNumSection(psUnNumSection = 
paste("###", r6ob_abbrtable$add_abbrev(psAbbrev = "ISM", psMeaning = "Informationssystem der Melkanlage")))
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die erfassten Milchmengendaten werden in einem Informationssystem gespeichert. Ein solches Informationssystem kann als zentrale Komponente eine Datenbank oder eine spezialisierte Struktur von verschiedenen Dateien enthalten. Die Datenbank oder die Dateistruktur wird durch Softwareprogramme ergänzt, welche das Datenmanagement und den Unterhalt für die Benutzer erleichtern. Das Informationssystem zur Speicherung der Milchmengendaten wird von nun an als Informationssystem der Melkanlage (ISM) bezeichnet.

objSecEnum$setUnNumSection(psUnNumSection = 
"### Automatisierter Tierdatenaustausch (ATDA)")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Das in diesem Dokument beschriebene Projekt befasst sich mit dem automatisierten Tierdatenaustausch zwischen Informationssystemen einer Melkanlage (ISM) und dem Informationssystem von Qualitas (ARGUS). Dieses Projekt wurde von der ASR initiiert und wird in Zusammenarbeit mit Qualitas umgesetzt. Von nun an wird das in diesem Dokument beschriebene Projekt mit ATDA-ASR bezeichnet.

objSecEnum$setUnNumSection(psUnNumSection = 
paste("###", r6ob_abbrtable$add_abbrev(psAbbrev = "SSATDA-ASR", psMeaning = "Software-System für den automatisierten Tierdatenaustausch")))
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Das Endprodukt des Projektes (ATDA-ASR) ist ein Software-System bestehend aus verschiedenen Programmen. Diese Programme entsprechen der umgesetzten Lösung des Projektes ATDA-ASR. Von nun an wird dieses Software-System mit SSATDA-ASR bezeichnet.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Andere Datenaustauschprojekte")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()
objSecEnum$setUnNumSection(psUnNumSection = 
"### ICAR-ADE")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Bei ICARr r6ob_abbrtable$add_abbrev(psAbbrev = "ICAR", psMeaning = "International Committee for Animal Recording", pbOut = FALSE) läuft das Projekt "ICAR-ADE"r r6ob_abbrtable$add_abbrev(psAbbrev = "ADE", psMeaning = "Animal Data Exchange, Austausch von Tierdaten", pbOut = FALSE) mit dem Ziel eine Grundlage für den automatisierten Austausch von Tierdaten zu erstellen. Im Projekt "ICAR-ADE"r r6ob_abbrtable$add_abbrev(psAbbrev = "ICAR-ADE", psMeaning = "Projekt für den Austausch von Tierdaten von ICAR", pbOut = FALSE) wird eine eigenständige Lösung für den automatischen Austausch von Tierdaten angestrebt. Das heisst, es werden neue Datentypen und Schnittstellen aufgrund von existierenden Standards von W3Cr r6ob_abbrtable$add_abbrev(psAbbrev = "W3C", psMeaning = "World Wide Web Consortium", pbOut = FALSE), UNCEFACTr r6ob_abbrtable$add_abbrev(psAbbrev = "UNCEFACT", psMeaning = "United Nations Center for Trade Fascilitation and Electronic Business", pbOut = FALSE) oder ISOr r6ob_abbrtable$add_abbrev(psAbbrev = "ISO", psMeaning = "International Organization for Standardization", pbOut = FALSE) definiert. Diese Definitionen dienen dann als Grundlage für eine unabhängige Umsetzung des Datenaustauschs. Der Vorteil dieser Lösung ist die Unabhängigkeit von bestehenden Lösungen und all ihren Einschränkungen. Ein offensichtlicher Nachteil ist die Redundanz mit anderen schon bestehenden Datenaustauschlösungen. Dieser Nachteil führt dazu, dass eine Umsetzung des Projekts sehr zeitaufwändig ist. Da das Projekt "ICAR-ADE" immer noch in der technischen Planungsphase steckt, wird die Umsetzung einer konkreten Lösung noch eine Weile auf sich warten lassen.

Das Projekt "ICAR-ADE" steckt noch in der Anfangsphase. Da der automatisierte Datenaustausch über das Projekt "ICAR-ADE" mittelfristig noch nicht zur Verfügung steht, hat sich die ASR dazu entschieden, ein eigenes Projekt auf nationaler Ebene, mit dem Ziel des automatisierten Tierdatenaustauschs (ATDA-ASR) zu realisieren. Ab Abschnitt 2 des vorliegenden Textes wird das Projekt ATDA-ASR genauer beschrieben werden.

objSecEnum$setUnNumSection(psUnNumSection = 
"### CRV Holland")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Gemäss Informationen (Telefonkonferenz vom 19.05.2016) von Bert van't Land (CRV Holland) betreibt CRV ein nationales Datenaustauschprojekt mit allen Roboterbetrieben in Holland. In diesem Projekt sind rund 3000 Betriebe beteiligt. Diese Betriebe weisen eine durchschnittliche Bestandesgrösse von 100 Kühen auf und jede Kuh sucht die Melkanlage pro Tag im Mittel 2.5 mal auf. Somit werden in diesem Projekt rund 1 Mio Records pro Tag von allen Betrieben auf die Datenbank bei VSM übermittelt (siehe nachfolgendes Schaubild). Jeder Record enthält das Datum und die Zeit des Melkvorganges, die Milchmenge und eine Identifikation (ID) der Kuh. Die reine Menge an übermittelten Daten ohne Metadaten beträgt rund 30 MB pro Tag. Mit Metadaten wird die total Datenmenge sehr wahrscheinlich immer noch kleiner sein, als 100 MB pro Tag.

Die technische Umsetzung des Datenaustauschs in Holland wurde von CRV an ein Informatikunternehmen names VSM ausgelagert. Dieses Unternehmen betreibt die Datenbank (siehe Schaubild) und hat auch PlugIns für die ISM der verschiedenen Melkanlagenanbietern geschrieben. Diese PlugIns werden auf den Betrieben installiert und übermitteln die Daten an die zentrale Datenbank. CRV Holland hat Zugriff auf die Milchmengendaten in der zentralen Datenbank bei VSM.

rmddochelper::insertOdgAsPdf(psOdgFileStem = "Schaubild_DE_CRV_NL", psOdgDir = "odg/ATDA-ProjectPlan")

VSM (Skype-Call vom 17.10.2016 mit JV) hat für den nationalen Datenaustausch in Holland ein System entwickelt, welches bereits im Jahr 2009 gestartet wurde und somit nicht auf dem ICAR-Standard basiert. Gemäss JV überträgt ihre Version mehr Informationen vom ISM zur zentralen Datenbank bei VSM im Vergleich zum ICAR-Standard.

Aufgrund der Bestrebungen zur Vereinheitlichung der Datenübertragung durch ICAR hat VSM auch den ICAR-Standard schon umgesetzt. Diese Implementation wird aber von den Melkmaschinenanbietern noch nicht produktiv verwendet. Laut JV ist nicht klar, wann und ob die Implementation aufgrund des ICAR-Standards produktiv eingesetzt werden wird.

objSecEnum$setUnNumSection(psUnNumSection = 
"### NDX Skandinavien")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

NDX steht für Nordic Data Exchanger r6ob_abbrtable$add_abbrev(psAbbrev = "NDX", psMeaning = "Nordic Data Exchange", pbOut = FALSE). NDX ist ein Projekt, welches den Datenaustausch in den skandinavischen Ländern automatisiert. Von Seiten der Hersteller sind Lely und DeLaval beteiligt.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Ziele")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()
objSecEnum$setUnNumSection(psUnNumSection = 
"## Primäre Zielsetzung")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Das primäre Ziel dieses Projekts ist es, die manuelle Übertragung von Milchmengendaten durch Milchkontrolleure auf Betrieben mit entsprechenden Melkanlagen zu ersetzen mit einer direkten elektronischen Übertragung der Milchmengendaten vom Informationssystem der Melkanlage zum Informationssystem von Qualitas (ARGUS).

objSecEnum$setUnNumSection(psUnNumSection = 
"## Funktionale Zielsetzung")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Der Datentransfer zwischen Melksystem und ARGUS muss im Normalbetrieb ohne manuelle Intervention einer Person funktionieren. Manuelle Interventionen einer Person sollen nur im Fall eines Fehlers erforderlich sein.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Erweiterte Zielsetzungen")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Vom technischen Standpunkt her gesehen, kann der automatisierte Datentransfer zwischen den Informationssystemen der Melkanlagen und ARGUS in beiden Richtungen, also nicht nur vom ISM zu ARGUS sondern auch von ARGUS zum ISM funktionieren. Damit ergeben sich zahlreiche Anwendungen, zum Beispiel können bei einer Neuinstallation einer Melkanlage die Daten von ARGUS ins Informationssystem der Melkanlage übertragen werden.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Automatisierter Tierdatenaustausch (ATDA)")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"## Komponenten des ATDA")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Der ATDA Prozess, welcher aus diesem Projekt ATDA-ASR resultieren soll, kann in drei Komponenten aufgeteilt werden.

  1. Export der Milchmengendaten aus dem ISM
  2. Transfer der exportierten Milchmengendaten vom ISM zu ARGUS
  3. Import der transferierten Daten in ARGUS

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"### Export der Milchmengendaten")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die für dieses Projekt (ATDA-ASR) interessanten Milchmengendaten sind im ISM abgelegt. Damit diese Daten zum Informationssystem der ZOr r6ob_abbrtable$add_abbrev(psAbbrev = "ZO", psMeaning = "Zuchtorganisation", pbOut = FALSE) bei Qualitas übertragen werden können, müssen sie zuerst aus dem ISM exportiert werden. Das Resultat dieses Datenexports muss je nach verwendeter Übertragungsmethode (siehe Abschnitte 3.1.2 und 4) anders aussehen. Die speziellen Anforderungen der exportierten Daten je nach Übertragungsmethode werden in Abschnitt 4 noch genauer beschrieben. Gemäss den Vorstellungen der Melkanlagenanbieter bezüglich des Ablaufs des Datenaustauschs (mehr dazu in Abschnitt 4) liegt dieser Teil des Projekts ATDA-ASR voll in der Verantwortung der Melkanlagenanbieter. Bei einer allfälligen Zusammenarbeit mit CRV/VSM und einer daraus resultierenden Übernahme der Lösung aus Holland, würde dieser Teil von den PlugIns von VSM übernommen werden.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"### Transfer der exportierten Milchmengendaten vom ISM zu ARGUS")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Der Datentransfer beinhaltet die Übertragung der exportierten Daten vom ISM zu ARGUS. Für die Übertragung von Daten zwischen zwei Informationssystemen gibt es schon existierende Lösungen. Zum aktuellen Zeitpunkt sind für dieses Projekt ATDA-ASR grundsätzlich drei verschiedene Arten der Datenübertragung denkbar. Diese werden in einem späteren Abschnitt (siehe Abschnitt 4) noch genauer beschrieben.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"### Import der transferierten Daten in ARGUS")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Der Import der transferierten Daten in ARGUS ist eine Aufgabe, welche aufgrund der Formatdefinition der transferierten Daten in ARGUS auf der Datenbank realisiert werden kann. Die aktuelle Version von ARGUS hat schon existierende Funktionalitäten, welche für den Import von anderen Daten verwendet werden. Beispiele dafür sind der Import von Daten ab der TVDr r6ob_abbrtable$add_abbrev(psAbbrev = "TVD", psMeaning = "Tierverkehrsdatenbank", pbOut = FALSE) von Identitas oder die automatisierte Übertragung von Besamungsdaten zwischen KB-Organisationen und Qualitas.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"## Geplanter Ablauf des ATDA")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Das folgende Schema gibt einen Überblick über den geplanten Ablauf des ATDA. Der Datenfluss läuft gemäss der Reihenfolge der Nummern im Schema ab. Vor der Milchkontrolle erhält der Kontrolleur das Material für die Kontrolle (Schritt 1). Im Schritt 2 führt der Kontrolleur die Milchkontrolle zu einem bestimmten Datum (entspricht dem Stichdatum für die Datenübertragung der Milchmengendaten) auf einem Betrieb durch. Bei der Milchkontrolle werden durch den Milchkontrolleur keine Milchmengendaten mehr erhoben. Stattdessen werden auf den vorgedruckten Formularen für den kontrollierten Betrieb die Mutationen (Zugänge und Abgänge) von Kühen sowie die Änderungen der Laktationsstati (trocken gestellt oder gekalbt) von Kühen erfasst. Das ausgefüllte Formular wird der ZO zugestellt, wo sie zur Überprüfung der Datenkonsistenz mit den übertragenen Milchmengendaten verarbeitet werden. Die Milchproben werden an das Milchlabor gesendet (Schritt 3). Im Schritt 4 liefert das Milchlabor die Analyseergebnisse an Qualitas von wo sie dann dem Betrieb zurückgemeldet werden (Schritt 5), entweder schriftlich per Post, oder via online Zugang zum Informationssystem der ZO (ARGUS).

rmddochelper::insertOdgAsPdf(psOdgFileStem = "Diagramm_Milchdatenfluss_ATDA", 
                             psOdgDir = "odg/ATDA-ProjectPlan")

Das Eintreffen der Milchanalyseergebnisse bei Qualitas für den kontrollierten Betrieb ist der Auslöser für den ATDA zwischen ARGUS und dem ISM des kontrollierten Betriebs (Schritt 6). Das Datum der Milchkontrolle wird als Stichdatum für den ATDA verwendet.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Arten des Datentransfers in ATDA-ASR")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Für dieses Projekt ATDA-ASR sind vorerst drei Arten des Datentransfers vorstellbar. Nach dem Treffen mit den Herstellern der Melkanlagen ist klar, dass für die Melkanlagenanbieter nur eine Cloud-basierte Datenübertragung (Variante 3) in Frage kommt. Die Details zur Umsetzung einer solchen Datenübertragung sind noch unklar. Da CRV-Holland zusammen mit den Anbietern Lelly, DeLaval und Fullwood schon ein Service zum automatischen Tierdatenaustausch betreibt, haben wir mit Bert van't Land von CRV und Johan Vloet von VSM Kontakt aufgenommen. Die Informationen zum Datenaustauschprojekt von CRV und VSM in Holland sind in den Abschnitten 1.3.2 und 5 beschrieben.

Der Vollständigkeit halber und zu Dokumentationszwecken werden hier trotzdem noch alle drei Varianten des Datenaustauschs beschrieben im Wissen, dass die ersten beiden Varianten höchstwahrscheinlich nicht umgesetzt werden können.

  1. Eigenständiger Webservice
  2. Fernwartungssoftware
  3. Cloud-basierte Datenübertragung

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"## Eigenständiger Webservice")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Diese Version entspricht im Wesentlichen der Umsetzung der im Projekt ICAR-ADE definierten Datentypen und Schnittstellen in einem eigenständigen Webservice. Dieser Webservice wird von Qualitas zur Verfügung gestellt und läuft auf einem Server von Qualitas. Die Datenübertragung wird von einem Client-Programm auf dem ISM gestartet. Dieses Programm kontaktiert den Webservice, welcher als Antwort die Definition der zu übertragenden Datenrecords zurückgibt. Aufgrund der Definition der Datenrecords werden die entsprechenden Daten als sogenannter Datenstrom mit einem definierten Format an Qualitas gesendet. Da die Datenübertragung vom Client-Programm des ISM initiiert wird, muss auf dem ISM das entsprechende Client-Programm, welches den Datenaustausch mit dem Webservice bei Qualitas initiiert, installiert sein. Das folgende Schaubild stellt den Datenaustausch per Webservice schematisch dar.

rmddochelper::insertOdgAsPdf(psOdgFileStem = "Schaubild_ATDA_Webservice", 
                             psOdgDir = "odg/ATDA-ProjectPlan")

Gemäss den Rückmeldungen der Melkanlagenanbieter ist eine Installation eines Client-Programms auf den ISM nicht praktikabel. Diese Systeme sind nicht homogen, z. Bsp. betreffend der verwendeten Version des Betriebssystems oder betreffend installierten Softwareprogrammen. Diese Einschätzung wird auch durch die ersten Resultat der Befragung der Melkanlagenanbieter bestätigt. Des Weiteren sind die ISM-System nicht immer stabil und teilweise schlecht gewartet.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"## Fernwartungssoftware")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Aufgrund unserer ersten bilateralen Abklärungen mit den Anbietern von Robotermelkanlagen, verfügen die Techniker der Anbieterfirmen der Melkanlagen über einen Zugang von einem Remote-Standort auf das ISM. Dieser Zugang von extern auf das ISM wird mittels sogenannter Fernwartungssoftware ermöglicht. In der Regel erlauben diese Fernwartungsprogramme auch den Austausch von Dateien zwischen den beiden Systemen, welche miteinander in Verbindung stehen.

Damit der Datentransfer mithilfe einer Ferwartungssoftware ohne manuelle Intervention umgesetzt werden kann, muss die Steuerung der Fernwartungssoftware von einem Programm aus möglich sein. Dies wird über ein von den Anbietern der Fernwartungssoftware zur Verfügung gestellte Schnittstelle - dem sogenannten APIr r6ob_abbrtable$add_abbrev(psAbbrev = "API", psMeaning = "Application Programming Interface", pbOut = FALSE) - realisiert. Das API besteht aus einer Spezifikation der Funktionalitäten der Fernwartungssoftware, welche von einem externen Programm verwendet werden können. Die Umsetzung dieser Lösung für den Datentransfer wäre sehr viel einfacher, wenn alle Hersteller die gleiche Fernwartungssoftware verwenden würden. Eine Abklärung diesbezüglich hat allerdings ergeben, dass verschiedene Fernwartungssoftwareprodukte zum Einsatz kommen.

Die folgende Tabelle gibt eine Übersicht über die verwendeten Fernwartungsprogramme

+-----------+-----------------------------------+--------------------------------------+ | Anbieter | Verwendete Fernwartungssoftware | Bemerkung | +===========+===================================+======================================+ | DeLaval | Teamviewer | für existierende Installationen | +-----------+-----------------------------------+--------------------------------------+ | | LogMeIn | für Neuinstallationen | +-----------+-----------------------------------+--------------------------------------+ | Lelly | TeamViewer | Versionen 6 und 11 | +-----------+-----------------------------------+--------------------------------------+ | GEA | FarmView | Verschlüsselungsrouter beim Kunden | +-----------+-----------------------------------+--------------------------------------+ | | AnyDesk | Testeinsatz | +-----------+-----------------------------------+--------------------------------------+ | Fullwood | TeamViewer | | +-----------+-----------------------------------+--------------------------------------+

Die Anzahl an verschiedenen Fernwartungsprogrammen erschwert uns die Verwendung dieser Programme für den Datenaustausch. Zusätzlich zur Anzahl der eingesetzten Fernwartungslösungen kommt noch hinzu, dass allfällige Wechsel der eingesetzten Programme oder Updates von bestehenden Programmen für uns zu einem grossen Arbeitsaufwand führen und potentielle Fehlerquellen dadurch nur schwer zu kontrollieren sind.

Die einzige Möglichkeit, wie diese Art des Datentransfers für uns noch praktikabel wäre, ist, dass uns die Anbieter erlauben würden, eine einheitliche Ferwartungslösung neben den bestehenden Programmen zu installieren. Das folgende Schaubild gibt einen Überblick über die Datenaustausch per Fernwartungssoftware.

rmddochelper::insertOdgAsPdf(psOdgFileStem = "Schaubild_ATDA_Fernwartung", 
                             psOdgDir = "odg/ATDA-ProjectPlan",
                             pnPaperWidthScale = 0.9)

Die oben beschriebene negative Einschätzung dieser Variante wurde durch die Rückmeldungen der Melkanlagenanbieter bestätigt. Abgesehen von der grossen Anzahl an eingesetzten Ferwartungslösungen, können Anbieter aufgrund von Verträgen auch das eingesetzte Fernwartungssystem wechseln, was für uns zu einem nochmals grösseren Arbeitsaufwand führen würde.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"## Cloud-basierte Datenübertragung")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Im Zeitalter von "big data" wird häufig von Daten in der Wolke (oder Cloud) gesprochen. Damit ist gemeint, dass sich die Daten physikalisch nicht mehr auf einer für den Benutzer spezifischen Rechner befinden, sondern in einem bestimmten Server-Netzwerk eines Anbieters abgelegt werden. Bekannte öffentliche Anbieter für Cloud-basierte Speicherlösungen sind "Dropbox", "Google Drive", "Microsoft Azure/Onedrive" oder "Apple iCloud". Gemäss ersten Abklärungen mit den Herstellern von Melkanlagen bestehen Pläne bei den Herstellern interne Cloud-Speicherlösungen aufzubauen.

objSecEnum$setUnNumSection(psUnNumSection = 
"### Datenaustausch über Cloud-Speicher der Melkanlagenhersteller")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Für die Verwendung einer Cloud-Speicherlösung eines Melkanlagenherstellers sind wir darauf angewiesen, dass wir einen Zugang zum Speicher erhalten und dass wir eine Schnittstelle für das Übertragen der Daten verwenden können. Laut den Aussagen der Vertreter der Melkanlagenhersteller dürften die Firmen-internen Cloud-Lösungen für dieses Projekt ATDA-ASR kaum zugänglich sein.

objSecEnum$setUnNumSection(psUnNumSection = 
"### Datenaustausch über öffentliche Anbieter von Cloud-Speicher")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Bezüglich des Datenaustauschs besteht zwischen den Anbietern von Speicherlösungen kein Unterschied. In allen Fällen muss jeder in diesem Projekt (ATDA-ASR) beteiligte Betrieb ein Benutzerkonto beim verwendeten Anbieter des Cloud-Speichers anlegen. Danach wird ein Programm (Client) auf dem Rechner des ISM installiert und mit dem erstellten Benutzerkonto verbunden. Auf dem Rechner des ISM wird ein neues Unterverzeichnis erstellt, dessen Inhalt automatisch mit dem Speicher im Netzwerk des Anbieters synchronisiert wird. Die auszutauschenden Daten müssen im neu erstellten Unterverzeichnis abgelegt werden. In den Einstellungen der Clientprogramme der Cloud-Speicher müssten die Daten für ein spezifischen Benutzerkonto von Qualitas freigegeben werden. Durch diese Freigabe können die Daten vom ISM zu Qualitas übertragen werden. Der Datentransfer per Cloud-Speicher ist im folgenden Schaubild dargestellt.

objSecEnum$setUnNumSection(psUnNumSection = 
"### Datenaustausch über einen eigenständigen Speicherservice")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die Benutzung von öffentlichen Cloud-Anbietern ist aus Gründen des Datenschutzes nicht ganz einfach. Ab einer gewissen Datenmenge sind die meisten Cloud-Dienste kostenpflichtig. Deshalb wurde von den Melkanlagenherstellern vorgeschlagen selber eine zentrale Datenaustausch-Infrastruktur zu erstellen. Die Anforderungen an ein solches Speichersystem bestehen darin, dass dieses System für die im Projekt beteiligten Betriebe und für das Datenbanksystem von Qualitas AG zugänglich sein muss. Die zentrale Funktionaliät des Speichersystems besteht in einer Art Datendrehscheibe, wobei die Betriebe die Milchmengendaten an das Speichersystem senden können und relevante Tierdaten vom System beziehen können. Das Informationssystem von Qualitas AG soll die Milchmengendaten beim Speichersystem abholen können und die für die Betriebe relevante Tierdaten an das System senden können.

rmddochelper::insertOdgAsPdf(psOdgFileStem = "Schaubild_ATDA_Cloud", 
                             psOdgDir = "odg/ATDA-ProjectPlan",
                             pnPaperWidthScale = 0.75)

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Plan des Projektablaufs")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die Tabelle am Ende dieses Dokuments zeigt einen ungefähren Projektplan. Die Planung wird immer für ein Quartal gemacht. Somit zeigt der aktuelle Plan jeweils, wie sich die bis zu aktuellen Zeitpunkt bekannten Themen auf das aktuelle Quartal aufteilen lassen. Wichtig ist die Tatsache, dass dieser Projektplan nicht abschliessend ist und somit das Projekt nicht am Ende des aktuellen Plans abgeschlossen sein wird.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Zusammenarbeit mit CRV/VSM Holland")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Anlässlich des Treffens mit den Melkanlagenanbietern am 18.3.2016 erfuhren wir, dass CRV Holland mit den Firmen DeLaval, Lelly und Fullwood bereits ein Service eines automatischen Tierdatenaustauschs betreibt. Zur Vermeidung von Doppelspurigkeiten und zur Minimierung des Aufwandes in diesem Projekt für die Melkanlagenanbieter und für uns, hatten wir Kontakt zu r r6ob_abbrtable$add_abbrev(psAbbrev = "BvL", psMeaning = "Bert van t Land") von CRV Holland aufgenommen (Telefonkonferenz am 19.05.2016, siehe dazu Abschnitt 1.3.2). Aufgrund des Austauschs mit BvL kontaktierten wir JV von VSM, die den Datenaustausch in Holland für CRV betreiben. Das Ziel des Kontakts mit JV ist die Verwendung der On-Farm PlugIns, welche die Daten aus dem ISM auf den Betrieben exportieren und diese an die zentrale Datenbank übermitteln. Gemäss einer ersten Aussage von JV ist es für VSM kein Problem die On-Farm PlugIns zur Verfügung zu stellen und die zentrale Datenbank, welche alle übermittelten Daten sammelt, zu betreiben.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Umsetzung des Datenaustauschs")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Beim Datenübertragungsservice von CRV in Holland werden die Daten von den on-farm Plugins aus den ISM auf den Betrieben exportiert und an die zentrale Datenbank bei VSM transferiert. Da in der Schweiz die gleichen Anbieter von Melkanlagen und somit von ISM wie in Holland aktiv sind, wäre die Verwendung der on-farm Plugins aus Holland für dieses Projekt von grossem Nutzen. Nach einer gewissen Anpassung der on-farm Plugins durch VSM, sollte es möglich sein diese auf den Betrieben in der Schweiz zu installieren. Analog zur Datenübertragung in Holland würden die für die Schweiz modifizierten Plugins die Daten aus den ISM auf den Betrieben exportieren und an die zentrale Datenbank bei VSM übermitteln. Neben der zentralen Datenbank betreibt VSM einen Webservice, der es erlaubt ab ARGUS gezielt Milchleistungsdaten abzufragen. Für diese Abfragen braucht es in ARGUS einen Client, welcher den Datentransfer initiiert. Das folgende Schaubild stellt den geplanten Datentransfer graphisch dar.

rmddochelper::insertOdgAsPdf(psOdgFileStem = "UmsetzungAtdaVsm")
objSecEnum$setUnNumSection(psUnNumSection = 
"## Weiteres Vorgehen")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Im weiteren Vorgehen beschäftigen wir uns in erster Linie mit dem Aufbau der Zusammenarbeit mit CRV und VSM. In einem ersten Schritt richten wir eine Testumgebung für den Datenaustausch zwischen der zentralen Datenbank bei VSM und ARGUS ein. JV hat uns zugesagt, dass wir von einem ihrer Testbetriebe Daten beziehen können. Dazu muss VSM einen Webservice zur Verfügung stellen, welcher es erlaubt, Daten von der zentralen Datenbank abzuholen. Wir bauen einen Client der die Testdaten vom Webservice bei VSM abholt und diese in ARGUS importiert. Aufgrund der Ergebnisse dieser Testübertragung kann über allfällige Rahmenbedingungen für den Betrieb des automatisierten Tierdatenaustauschs entschieden werden.

In einem weiteren Schritt kann nach erfolgter Anpassung der PlugIns von VSM ein Testbetrieb in der Schweiz ausgewählt werden. Auf diesem Testbetrieb wird das an die Schweiz angepasste PlugIn installiert und die Daten werden an die zentrale Datenbank bei VSM übermittelt. Sobald die ersten Daten des schweizer Testbetriebs bei VSM sind, können diese über den im ersten Schritt erstellten Webservice von ARGUS abgefragt werden.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Datenkonsistenz")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die Erfassung der Mutationen und der Änderungen des Laktationsstatus' von Kühen auf den jeweiligen Betrieben durch den Milchkontrolleur dient als Kontrolle für das System SSATDA-ASR. Die von SSATDA-ASR abgeholten Daten nach einer Milchkontrolle müssen mit den vom Milchkontrolleur erfassten Mutationen und Änderungen des Laktationsstatus von Kühen konsistent sein.

\vspace{1ex}

objSecEnum$setUnNumSection(psUnNumSection = 
"# Abgrenzung")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

In diesem Projekt beschränken wir uns auf den Austausch von Milchmengendaten zwischen Melkanlagen und dem Datenbanksystem ARGUS von Qualitas. Wie im vorangegangenen Abschnitt bereits erwähnt, besucht der Milchkontrolleur weiterhin jeden Betrieb, auch jene, welche in diesem Projekt ATDA-ASR beteiligt sind. Die wesentliche Änderung, welche mit dem Projekt ATDA-ASR eingeführt wird, ist die automatisierte Übertragung der Milchmengendaten. Diese löst die manuelle Übertragung der Milchmengendaten mittels Begleitschein ab.

Analog zu der in diesem Projekt ATDA-ASR geplanten Ablösung der manuellen Datenübertragung durch eine automatisierten Prozess, sind weitere Anpassungen des gesamten Milchkontrollwesens denkbar. Einige dieser möglichen Anpassungen sind in den folgenden Abschnitten kurz beschrieben. Diese sind aber klar nicht Teil dieses Projektes ATDA-ASR, sondern müssten als eigenständige Folgeprojekte realisiert werden.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Anpassungen beim Begleitschein")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Die aktuelle Version des Begleitscheins ist auf Papier gedruckt. Die Daten werden handschriftlich auf den Begleitschein eingetragen. Die ausgefüllten Begleitscheine werden dann bei den Zuchtorganisationen eingescannt. Der Begleitschein in Papierform liesse sich durch eine elektronische Version auf einem Notebook einem Tablet oder einem Smartphone ersetzen. Die auf dem elektronischen Begleitschein erfassten Daten könnten dann direkt an die zentrale Datenbank der Zuchtorganisationen bei Qualitas übertragen werden. Damit würde sich der Druck der Begleitscheine auf Papier und das Scannen der ausgefüllten Begleitscheine erübrigen.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Erneuerung des Kontrollwesens")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Im Zentrum des Milchkontrollwesens steht der monatliche Besuch des Milchkontrolleurs auf jedem Betrieb. Bei diesem Besuch werden die Milchmengendaten erhoben und es werden Milchproben für die Bestimmung von Milchinhaltsstoffen im Labor gezogen. In diesem Projekt ATDA-ASR werden die vom Melksystem erfassten Milchmengendaten automatisiert übertragen. Moderne Melkanlagen haben teilweise schon eingebaute Analyseeinheiten, welche diverse Milchinhaltsstoffe bestimmen können. Sofern die Analysen von den zuständigen Kontrollinstanzen anerkannt werden, könnten die so bestimmten Ergebnisse auch bei der Übertragung der Milchmengendaten mitgeliefert werden. Somit wäre der Besuch des Kontrolleurs auf dem Betrieb nicht mehr erforderlich.

objSecEnum$setUnNumSection(psUnNumSection = 
"## Austausch weiterer Datentypen")
objSecEnum$parseUnNumSection()
objSecEnum$displayNumSection()

Durch die technische Weiterentwicklung bei den Milchanlagen und anderen Stalleinrichtungen werden immer grössere Mengen an Daten gesammelt. Diese Daten beschränken sich nicht nur auf Leistungsdaten, sondern beschreiben auch das Verhalten, die Futteraufnahme und den Gesundheitsstatus der Tiere. Diese Daten können auch für die züchterische Bearbeitung interessant sein. Dies bedingt aber, dass diese Daten zentral gesammelt und verarbeitet werden. Dies erfordert eine automatisierte Übertragung von den Betrieben in eine zentrale Datenbank. Die automatisierte Übertragung von weiteren Datentypen von Betrieben in eine zentrale Datenbank wird in einem möglichen Folgeprojekt umgesetzt werden.

\blandscape

rmddochelper::insertOdsAsPdf(psOdsFileStem = "ProjektAblaufplan2017Q1", 
                             pnPaperWidthScale = 1.15)

\elandscape

if (!r6ob_abbrtable$is_empty_abbr())
  r6ob_abbrtable$writeToTsvFile()

\pagebreak

r6ob_abbrtable$include_abbr_table(psAbbrTitle = "# Abkürzungen")


pvrqualitasag/ATDAProjectPlan documentation built on May 26, 2019, 11:33 a.m.