added schema
parent
f87bf4c489
commit
095c00fb04
@ -0,0 +1,557 @@
|
||||
# Scalar-Typen für die GraphQL-Schnittstelle - siehe DateTimeScalarConfig.class
|
||||
scalar DateTime
|
||||
scalar Date
|
||||
|
||||
type Query {
|
||||
allWaehrungen: [Waehrung!]!
|
||||
waehrungByCurrencyCode(currencyCode: String!): [Waehrung!]
|
||||
waehrungByCurrencyType(currencyType: String!): [Waehrung!]
|
||||
sensors: [Sensor]
|
||||
sensor(id: ID!): Sensor
|
||||
measureConceptList(measurementConceptId: ID!, namePattern: String) : [MeasureConcept]
|
||||
findObservation( measurementConceptId: ID!, sensorName: String, observationVariableNamePattern:String, startTime:String, endTime:String) : [Observation]
|
||||
findGapsInObservations (measurementConceptId: ID!,sensorId: ID, startTime: String, endTime: String, gapDurationMinutes: Int, turnOfMonth: Boolean): [ObservationGap]
|
||||
findNearestObservations(measurementConceptId: ID!,sensorName: String, observationVariableName: String, variableUnitIdList: [ID], timeUTC: String,timeOrder: String): [ObservationDetails]
|
||||
findObservationSummaryList(measurementConceptId: ID!): [ObservationSummary]
|
||||
findObservationVariableSummaryList(measurementConceptId: ID!): [ObservationVariableSummary]
|
||||
getObservationVariableUnitData(observationUnitList: [ID], observationVariableName: String, unitName: String ): [ObservationVariableUnitData]!
|
||||
getIndexes(indexFamilyId: Int, id: Int, name: String): [Index]
|
||||
getIndexValues(indexId: Int, periodFrom: String, periodTo: String): [IndexValue]
|
||||
reportMC(siteId: Int!, tenant: String!, dateTimeFromIsoUtc: String, dateTimeToIsoUtc: String): [MesskonzeptRow]
|
||||
reportEichfristen(MKA_ANLAGENR: String, MKA_NAME: String, EICHJAHR: Int): [EichfristenRow]
|
||||
getMBusConfiguration(m2mId: Int!): M2MConfiguration!
|
||||
getMKAList: [MKA]
|
||||
getCustomerAccountHistory(ecNumber: String!, monatYYYYMM: String, anzMonateRetour: Int): [CustomerAccountHistory]
|
||||
getMKAByAnlagenr(mkaAnlagenr: String!): [MKA]
|
||||
getMKAByName(mkaName: String!): [MKA]
|
||||
getOpenSolarReport(queryName: String!, params: [ReportParam]): ReportResponse
|
||||
isAnlagenabrechnungRunning(anlagenNr: String!): Boolean!
|
||||
getAllRunningInstances(processDefinitionKey: String!): [String]
|
||||
# --------------------------------------------------------------
|
||||
# Abfragen für das "LLM Meter Reading Recording" OERedshift - Beginn
|
||||
# --------------------------------------------------------------
|
||||
# Sucht Sensoren, deren Name mit <meterNumber>* beginnt. Liefert Sensor-ID, Name, zugehöriges MeasureConcept (id, name, descr). Das LLM braucht das, um bei mehreren Treffern dem User die MeasureConcept-Auswahl anzubieten.
|
||||
sensorsForMeterNumber(meterNumber: String!): [SensorInfo!]!
|
||||
# Liefert den letzten existierenden Messwert (Zählerstand + Zeitpunkt) für einen Sensor. Default-Variable: ENERGY_INST_VAL. Das LLM braucht das, um festzustellen, ob überhaupt ein Anfangsstand existiert.
|
||||
lastObservation(sensorId: ID!, variableName: String): Observation
|
||||
# Prüft, ob am angegebenen Tag bereits ein Zählerstand vorhanden ist. Kernregel: Doppelerfassung am selben Tag verhindern.
|
||||
observationsForDay(sensorId: ID!, date: Date!, variableName: String): [Observation!]!
|
||||
# Prüft für den Zeitraum from-to, ob für jeden Monatswechsel jeweils ein Wert kurz vor und kurz nach 00:00 UTC existiert. Liefert eine Liste der fehlenden Monate/Seiten (before/after midnight).Das ist die zentrale Validierung für die Ultimo-Regel.
|
||||
monthlyGapCheck(sensorId: ID!, from: DateTime!, to: DateTime!, variableName: String): [MonthGap!]!
|
||||
# Listet die verfügbaren ObservationVariables und zur Variable gehörige Unit für einen Sensor. Alphabetisch sortiert nach Variable-Name. Das LLM braucht das, um dem User die Auswahl der Variable zu ermöglichen (z.B. ENERGY_INST_VAL, ENERGY_DAY_VAL, POWER_VAL, etc.)
|
||||
availableVariableUnits(sensorId: ID!): [VariableUnitInfo!]!
|
||||
# --------------------------------------------------------------
|
||||
# Abfragen für das "LLM Meter Reading Recording" - Ende
|
||||
# --------------------------------------------------------------
|
||||
|
||||
}
|
||||
|
||||
# Eingabetyp für die Parameter des Reports
|
||||
input ReportParam {
|
||||
key: String!
|
||||
value: String!
|
||||
}
|
||||
# ReportResponse is a generic response for reports with: title, headers and data (OpenSolar Reports
|
||||
type ReportResponse {
|
||||
title: String
|
||||
headers: [String]
|
||||
data: [ReportData]
|
||||
}
|
||||
# das Ergebnis des Reports sind 0-n Zeilen (ReportData) mit Werten (values)
|
||||
type ReportData {
|
||||
values: [String]
|
||||
}
|
||||
|
||||
type MKA {
|
||||
id: ID!
|
||||
dbkUid: String!
|
||||
updateKey: String!
|
||||
updateCount: Int!
|
||||
updateUid: String!
|
||||
firstApprovalUid: String!
|
||||
finalApprovalUid: String!
|
||||
lockUid: String
|
||||
firstApprovalStamp: String!
|
||||
finalApprovalStamp: String!
|
||||
lockStamp: String
|
||||
status: Int!
|
||||
rekey01: String!
|
||||
rekey02: String!
|
||||
mkaAnlagenr: String!
|
||||
mkaGiltab: String!
|
||||
mkaStatus: String!
|
||||
mkaMonatVon: Int!
|
||||
mkaName: String!
|
||||
mkaDatumIbn: String
|
||||
mkaStichtag: String!
|
||||
mkaZession: Int
|
||||
mkaAnmerkVm: String
|
||||
mkaAnmerkNo: String
|
||||
mkaAnmerkFl: String
|
||||
mkaAdresse: String
|
||||
mkaPlz: String
|
||||
mkaVerantwort: String
|
||||
mkaGenehmMail: String
|
||||
}
|
||||
|
||||
type CustomerAccountHistory {
|
||||
building: String
|
||||
teilnehmer: String
|
||||
meteringpoint: String
|
||||
mandatreferenz: String
|
||||
monat: String
|
||||
akontoEUR: Float
|
||||
istVerbrauch: Float
|
||||
unitVerbrauch: String
|
||||
preisUnit: Float
|
||||
unitPreis: String
|
||||
preisVerbrauchEUR: Float
|
||||
saldoEUR: Float
|
||||
fehler: String
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
createWaehrung(waehrung: WaehrungInput!): Waehrung!
|
||||
updateWaehrung(id: ID!, waehrung: WaehrungInput!): Waehrung!
|
||||
deleteWaehrung(id: ID!): Boolean!
|
||||
createSensor(name: String!, nameExtern: String, description: String, measureConceptId: ID!): Sensor
|
||||
updateSensor(id: ID!, name: String!, nameExtern: String, description: String, measureConceptId: ID!): Sensor
|
||||
deleteSensor(id: ID!): String
|
||||
createObservation ( measureConceptId: ID! ,sensorNameLike:String, observationVariableNameLike: String, observationVariableUnitId: ID, observationTimeString: String, userName:String, meterValue:Float, imageFileName: String): Observation
|
||||
# --------------------------------------------------------------
|
||||
# Abfragen für das "LLM Meter Reading Recording" OERedshift - Beginn
|
||||
# --------------------------------------------------------------
|
||||
# Die Haupt-Mutation für einen einzelnen Zählerstand. Input: sensorId, moment, value (metervalue), variableUnit (optional, default ENERGY_INST_VAL). Serverseitig erzwingt sie die Regel "kein zweiter Wert am selben Tag" und gibt einen klaren Fehler zurück, falls verletzt. Sonst wird Observation erzeugt.
|
||||
recordMeterReading(input: MeterReadingInput!): MeterReadingResult!
|
||||
# Batch-Mutation für eine Serie von Ultimo-Ständen. Input: sensorId, variableUnit, eine zeitlich sortierte Liste von {month: YearMonth, meterValue: Float}. Es sollen Observations erzeugt werden.
|
||||
recordUltimoReadings(input: UltimoReadingsInput!): UltimoResult!
|
||||
# Setzt den Anfangszählerstand. Input: sensorId, startDate, startValue (default 0), variableUnit. Wird gebraucht, wenn lastObservation keinen Treffer liefert. Getrennt von recordMeterReading, damit das LLM den Initialfall explizit steuern kann.
|
||||
# es wird auch erlaubt einen Erststand VOR den aktuell ersten Stand zu setzen. Oft gebraucht wenn Zählereinbau bei 0, der erste Wert in der DB aber schon Zäherstand > 0 hat
|
||||
initializeMeterReading(input: InitMeterInput!): MeterReadingResult!
|
||||
# --------------------------------------------------------------
|
||||
# Abfragen für das "LLM Meter Reading Recording" OERedshift - Ende
|
||||
# --------------------------------------------------------------
|
||||
|
||||
}
|
||||
|
||||
input MeterReadingInput {
|
||||
sensorId: ID!
|
||||
moment: DateTime!
|
||||
value: Float!
|
||||
variableName: String
|
||||
variableUnit: String
|
||||
}
|
||||
|
||||
input InitMeterInput {
|
||||
sensorId: ID!
|
||||
startDate: Date!
|
||||
startValue: Float = 0
|
||||
variableName: String
|
||||
variableUnit: String
|
||||
}
|
||||
|
||||
input UltimoReadingsInput {
|
||||
sensorId: ID!
|
||||
variableName: String
|
||||
variableUnit: String
|
||||
readings: [UltimoReadingEntry!]!
|
||||
}
|
||||
|
||||
input UltimoReadingEntry {
|
||||
month: String! # YearMonth im Format "YYYY-MM"
|
||||
meterValue: Float!
|
||||
}
|
||||
|
||||
input WaehrungInput {
|
||||
dbkUid: String!
|
||||
updateKey: String!
|
||||
updateName: String!
|
||||
updateCount: Int!
|
||||
firstApprovalUid: String!
|
||||
finalApprovalUid: String!
|
||||
lockUid: String
|
||||
firstApprovalStamp: String!
|
||||
finalApprovalStamp: String!
|
||||
lockStamp: String
|
||||
status: Int!
|
||||
currencyCode: String!
|
||||
currencyType: String!
|
||||
isEuroCurrency: String!
|
||||
decimalPlaces: Int!
|
||||
}
|
||||
|
||||
type Index {
|
||||
id: Int
|
||||
indexFamilyId: Int
|
||||
isInactive: Boolean
|
||||
name: String
|
||||
isCombined: Boolean
|
||||
isCapitalPreservationModel: Boolean
|
||||
minValue: Float
|
||||
maxValue: Float
|
||||
maxDeltaIncrease: Float
|
||||
maxDeltaDecrease: Float
|
||||
publicationPeriodDuration: Int
|
||||
publicationPeriodDurationUnit: Int
|
||||
publicationReferenceDate: String
|
||||
publicationSchedulingReferenceDate: String
|
||||
schedulingPeriodDuration: Int
|
||||
schedulingPeriodDurationUnit: Int
|
||||
schedulingReferenceDate: String
|
||||
decimals: Int
|
||||
hasUnreliablePublicationSchedule: Boolean
|
||||
tentativeValuePeriodRange: Int
|
||||
tentativeValuePeriodJumping: Int
|
||||
created: String
|
||||
modified: String
|
||||
}
|
||||
|
||||
|
||||
type IndexValue {
|
||||
id: Int
|
||||
name: String
|
||||
periodBegin: String
|
||||
value: Float
|
||||
}
|
||||
|
||||
type EichfristenRow {
|
||||
MKA_ANLAGENR: String
|
||||
MKA_NAME: String
|
||||
BSTAETTE: Int
|
||||
MANDANT: String
|
||||
MK_EICHUNG: String
|
||||
EICHJAHR: Int
|
||||
MK_ZAEHLER: String
|
||||
MK_HAUPTKATEGORIE: String
|
||||
MK_KATEGORIE: String
|
||||
MK_ZAEHLER_GUI: String
|
||||
MK_SERIALNR: String
|
||||
MK_MBUS_PRIM: String
|
||||
MK_MBUS_SEC: String
|
||||
MK_OBSERVATION_VARIABLE: String
|
||||
HERSTELLER: String
|
||||
EINHEIT_KBEZ: String
|
||||
EINHEIT_BEZ: String
|
||||
E_20074_DBK: String
|
||||
ZAEHLER_NEU: String
|
||||
MK_GILT_AB: String
|
||||
MK_GILT_BIS: String
|
||||
}
|
||||
|
||||
type MesskonzeptRow {
|
||||
zaehler: String
|
||||
einheit: String
|
||||
zaehlerArt: String
|
||||
zaehlerTyp: String
|
||||
observationVariable: String
|
||||
rollVor: Int
|
||||
rollNach: Int
|
||||
m2m: String
|
||||
interf: String
|
||||
serial: String
|
||||
mbusPrim: String
|
||||
mbusSec: String
|
||||
plz: String
|
||||
strasse: String
|
||||
objektNr: Int
|
||||
herstellerBezeich: String
|
||||
bemerk1: String
|
||||
bemerk2: String
|
||||
inputWert: Int
|
||||
kategorie: String
|
||||
messwTyp: String
|
||||
intpolArt: String
|
||||
intpolIntval: Float
|
||||
extpolIntval: Float
|
||||
formel: String
|
||||
raster: String
|
||||
rasterStart: String
|
||||
hauptkategorie: String
|
||||
zaehlerGui: String
|
||||
sichtbarNurOE: String
|
||||
wertKonstant: Float
|
||||
datumIbn: String
|
||||
initialStand: Float
|
||||
verrechnung: String
|
||||
eichung: String
|
||||
giltAb: String
|
||||
giltBis: String
|
||||
}
|
||||
|
||||
type Observation {
|
||||
id: ID!
|
||||
sensor: Sensor!
|
||||
observationVariableUnit: ObservationVariableUnit!
|
||||
measureType: MeasureType!
|
||||
observationRaster: ObservationRaster!
|
||||
contextHashValue: String
|
||||
moment: String!
|
||||
quality: String!
|
||||
status: Int!
|
||||
value: Float!
|
||||
meterValue: Float!
|
||||
}
|
||||
|
||||
type ObservationGap {
|
||||
resultRow: Int!
|
||||
observation: Observation!
|
||||
prevMoment: String!
|
||||
gapDurationFormated: String!
|
||||
gapDuration: Int!
|
||||
}
|
||||
|
||||
|
||||
type ObservationDetails {
|
||||
resultRow: Int!
|
||||
observation: Observation!
|
||||
observationVariableName: String!
|
||||
unitName : String!
|
||||
}
|
||||
|
||||
type ObservationVariableUnit {
|
||||
id: ID!
|
||||
observationVariable: ObservationVariable!
|
||||
unit: Unit!
|
||||
}
|
||||
|
||||
|
||||
type ObservationVariableUnitData {
|
||||
observationVariableUnitId: ID!
|
||||
observationVariableName: String!
|
||||
unitName: String!
|
||||
}
|
||||
|
||||
|
||||
type ObservationVariable {
|
||||
id: ID!
|
||||
name: String!
|
||||
description: String
|
||||
}
|
||||
|
||||
type ObservationRaster {
|
||||
id: ID!
|
||||
unit: Unit!
|
||||
anzahl: Float!
|
||||
name: String!
|
||||
description: String
|
||||
}
|
||||
|
||||
type ObservationContext {
|
||||
hashValue: ID!
|
||||
measureConcept: MeasureConcept!
|
||||
sensor: Sensor
|
||||
m2m: String
|
||||
moment: String!
|
||||
binaryMessage: String
|
||||
decodedMessage: String
|
||||
}
|
||||
|
||||
type Sensor {
|
||||
id: ID!
|
||||
measureConcept: MeasureConcept!
|
||||
name: String!
|
||||
nameExtern: String
|
||||
description: String
|
||||
}
|
||||
|
||||
type MeasureConcept {
|
||||
id: ID!
|
||||
name: String!
|
||||
description: String
|
||||
sensors: [Sensor]
|
||||
}
|
||||
|
||||
type MeasureType {
|
||||
id: ID!
|
||||
name: String!
|
||||
description: String
|
||||
}
|
||||
|
||||
type Unit {
|
||||
id: ID!
|
||||
name: String!
|
||||
description: String
|
||||
}
|
||||
|
||||
type ObservationSummary {
|
||||
mcId: ID!
|
||||
mcName: String!
|
||||
sensorId: ID!
|
||||
sensorName: String!
|
||||
firstObservation: String!
|
||||
lastObservation: String!
|
||||
countObservation: Int
|
||||
measurementDays: Int
|
||||
integration: String!
|
||||
timeliness: String!
|
||||
}
|
||||
|
||||
type ObservationVariableSummary {
|
||||
mcId: ID!
|
||||
mcName: String!
|
||||
sensorId: ID!
|
||||
sensorName: String!
|
||||
variableId: ID!
|
||||
variableName: String!
|
||||
firstObservation: String!
|
||||
lastObservation: String!
|
||||
countObservation: Int!
|
||||
minMeterValue: Float
|
||||
maxMeterValue: Float
|
||||
distinctMeterValueCount: Int
|
||||
}
|
||||
|
||||
|
||||
|
||||
type M2MConfiguration {
|
||||
name: String
|
||||
alias: String
|
||||
m2m: String
|
||||
type: String
|
||||
infoText: String
|
||||
notificationInterval: Int
|
||||
notificationQueueName: String
|
||||
observationQueueName: String
|
||||
readingFrequencySeconds: Int
|
||||
queuingIntervalSeconds: Int
|
||||
iterations: Int
|
||||
calibrations: [Calibration]
|
||||
scalings: [Scaling]
|
||||
communicationParameters: CommunicationParameters
|
||||
serialCommunicationParameters: SerialCommunicationParameters
|
||||
winsockCommunicationParameters: WinsockCommunicationParameters
|
||||
sqs: String
|
||||
activeMQ: String
|
||||
activeMQParameters: ActiveMQParameters
|
||||
awsMQTT: String
|
||||
paho: String
|
||||
pahoLocal: String
|
||||
awsMqttParameters: AwsMqttParameters
|
||||
pahoParameters: PahoParameters
|
||||
searchIntervalSeconds: Int
|
||||
meterDefinitions: [MeterDefinition]
|
||||
}
|
||||
|
||||
type Calibration {
|
||||
observationVariable: String
|
||||
calibrationValue: Float
|
||||
}
|
||||
|
||||
type Scaling {
|
||||
unitOld: String
|
||||
unitNew: String
|
||||
scaleFactor: Float
|
||||
}
|
||||
|
||||
type CommunicationParameters {
|
||||
communicationType: String
|
||||
timeOutInMillis: Int
|
||||
retryCount: Int
|
||||
continueIfError: String
|
||||
testCommunication: String
|
||||
}
|
||||
|
||||
type SerialCommunicationParameters {
|
||||
portName: String
|
||||
baudRate: Int
|
||||
dataBits: Int
|
||||
stopBits: Int
|
||||
parity: Int
|
||||
flowControl: Int
|
||||
}
|
||||
|
||||
type WinsockCommunicationParameters {
|
||||
inetHost: String
|
||||
inetPort: Int
|
||||
}
|
||||
|
||||
type ActiveMQParameters {
|
||||
activeMQAddr: String
|
||||
}
|
||||
|
||||
type AwsMqttParameters {
|
||||
reportingIntervalMillisec: Int
|
||||
awsKeyLocation: String
|
||||
awsKeyPrefix: String
|
||||
}
|
||||
|
||||
type PahoParameters {
|
||||
reportingIntervalMillisec: Int
|
||||
pahoAddress: String
|
||||
pahoUser: String
|
||||
pahoPassword: String
|
||||
pahoTopicId: String
|
||||
}
|
||||
|
||||
type MeterDefinition {
|
||||
primaryAddress: String
|
||||
addressString: String
|
||||
meterType: String
|
||||
readIntervalSeconds: Int
|
||||
}
|
||||
|
||||
type Waehrung {
|
||||
id: ID!
|
||||
dbkUid: String!
|
||||
updateKey: String!
|
||||
updateName: String!
|
||||
updateCount: Int!
|
||||
firstApprovalUid: String!
|
||||
finalApprovalUid: String!
|
||||
lockUid: String
|
||||
firstApprovalStamp: String!
|
||||
finalApprovalStamp: String!
|
||||
lockStamp: String
|
||||
status: Int!
|
||||
currencyCode: String!
|
||||
currencyType: String!
|
||||
isEuroCurrency: String!
|
||||
decimalPlaces: Int!
|
||||
}
|
||||
|
||||
# ---------------------------------------------------
|
||||
# Hilfstypen für das "LLM Meter Reading Recording" OERedshift - Begin
|
||||
# ---------------------------------------------------
|
||||
type VariableUnitInfo {
|
||||
variableUnitId: ID!
|
||||
variableName: String!
|
||||
unitName: String!
|
||||
}
|
||||
|
||||
type SensorInfo {
|
||||
sensorId: ID!
|
||||
sensorName: String!
|
||||
sensorNameExtern: String
|
||||
descr: String
|
||||
measureConcept: MeasureConceptInfo!
|
||||
}
|
||||
|
||||
type MeasureConceptInfo {
|
||||
id: ID!
|
||||
name: String!
|
||||
descr: String
|
||||
}
|
||||
|
||||
type MonthGap {
|
||||
yearMonth: String! # z.B. "2025-10"
|
||||
missingBeforeMidnight: Boolean!
|
||||
missingAfterMidnight: Boolean!
|
||||
}
|
||||
type ValidationError {
|
||||
code: String! # z.B. DUPLICATE_DAY, MISSING_GAP, NO_INITIAL_READING
|
||||
message: String!
|
||||
details: String # JSON-String mit weiteren Informationen, z.B. die betroffenen Tage bei DUPLICATE_DAY oder MISSING_GAP
|
||||
}
|
||||
type UltimoResult {
|
||||
success: Boolean!
|
||||
created: [Observation!]!
|
||||
errors: [ValidationError!]
|
||||
}
|
||||
type MeterReadingResult {
|
||||
success: Boolean!
|
||||
observation: Observation
|
||||
errors: [ValidationError!]
|
||||
}
|
||||
# ---------------------------------------------------
|
||||
# Hilfstypen für das "LLM Meter Reading Recording" - Ende
|
||||
# ---------------------------------------------------
|
||||
Loading…
Reference in New Issue