From 768543bf5eb9a85223b26fced4cadadabf0fb7f0 Mon Sep 17 00:00:00 2001 From: Le Yang Date: Tue, 16 Jan 2024 12:09:28 -0500 Subject: [PATCH] feat: message examiner (#6) --- .gitignore | 2 + projects/Canary.Tests/Canary.Tests.csproj | 6 +- .../Canary.Tests/MessagesControllerTests.cs | 10 + projects/Canary.Tests/RecordTests.cs | 2 + projects/Canary/Canary.csproj | 8 +- projects/Canary/ClientApp/package-lock.json | 400 ++++++++++-------- projects/Canary/ClientApp/package.json | 2 +- projects/Canary/ClientApp/src/App.js | 2 + .../ClientApp/src/components/Navigation.js | 1 + .../src/components/dashboard/Dashboard.js | 6 + .../ClientApp/src/components/misc/Getter.js | 45 +- .../ClientApp/src/components/misc/Record.js | 2 +- .../misc/info/Types/DeathRecordType.js | 2 +- .../src/components/tools/MessageInspector.js | 84 ++++ projects/Canary/ClientApp/src/index.js | 4 +- .../Canary/Controllers/MessagesController.cs | 46 ++ .../Canary/Controllers/RecordsController.cs | 2 +- projects/Canary/Models/DeathRecordFaker.cs | 1 + projects/Canary/Models/Message.cs | 240 +++++++++++ projects/Canary/Models/Record.cs | 2 +- projects/Canary/Models/Test.cs | 2 +- 21 files changed, 661 insertions(+), 208 deletions(-) create mode 100644 projects/Canary/ClientApp/src/components/tools/MessageInspector.js diff --git a/.gitignore b/.gitignore index 8a30d258..da18949f 100644 --- a/.gitignore +++ b/.gitignore @@ -396,3 +396,5 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml + +.DS_Store diff --git a/projects/Canary.Tests/Canary.Tests.csproj b/projects/Canary.Tests/Canary.Tests.csproj index ff004838..20023e2e 100644 --- a/projects/Canary.Tests/Canary.Tests.csproj +++ b/projects/Canary.Tests/Canary.Tests.csproj @@ -7,9 +7,9 @@ - - - + + + diff --git a/projects/Canary.Tests/MessagesControllerTests.cs b/projects/Canary.Tests/MessagesControllerTests.cs index da38d7f5..61e1f997 100644 --- a/projects/Canary.Tests/MessagesControllerTests.cs +++ b/projects/Canary.Tests/MessagesControllerTests.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http; using System.Collections.Generic; using VRDR; +using canary.Models; namespace canary.tests { @@ -43,12 +44,21 @@ public async void BadNewMessagePostReturnsIssues() }; _messagesController.ControllerContext.HttpContext = httpContext; var response = await _messagesController.NewMessagePost(); + var message = response.message; var issues = response.issues[0]; Assert.Equal(2, issues.Count); Assert.Contains(new KeyValuePair("severity", "error"), issues); Assert.Contains(new KeyValuePair("message", "Failed to find a Bundle Entry containing a Resource of type MessageHeader. Error occurred at VRDR.BaseMessage in function Parse."), issues); } + [Fact] + public void TestUnknownDescriptionMessageProperties() + { + string desc = Message.GetDescriptionFor("AUTOP"); + + Assert.Equal("Was Autopsy performed", desc, true, true, true, true); + } + private string FixturePath(string filePath) { if (Path.IsPathRooted(filePath)) diff --git a/projects/Canary.Tests/RecordTests.cs b/projects/Canary.Tests/RecordTests.cs index 9507043f..0ba05ccd 100644 --- a/projects/Canary.Tests/RecordTests.cs +++ b/projects/Canary.Tests/RecordTests.cs @@ -55,6 +55,7 @@ public void TestNonDocumentTypePayload() Assert.Contains("error", issueList.ToString()); } + [Fact] public void TestMissingTypePayload() { @@ -68,6 +69,7 @@ public void TestMissingTypePayload() Assert.Contains("error", issueList.ToString()); } + private string FixturePath(string filePath) { if (Path.IsPathRooted(filePath)) diff --git a/projects/Canary/Canary.csproj b/projects/Canary/Canary.csproj index 6e3d24f8..71f66a2d 100644 --- a/projects/Canary/Canary.csproj +++ b/projects/Canary/Canary.csproj @@ -16,10 +16,10 @@ - - - - + + + + diff --git a/projects/Canary/ClientApp/package-lock.json b/projects/Canary/ClientApp/package-lock.json index c2bc50ef..fdefa777 100644 --- a/projects/Canary/ClientApp/package-lock.json +++ b/projects/Canary/ClientApp/package-lock.json @@ -16,7 +16,7 @@ "@semantic-ui-react/css-patch": "^1.1.2", "@testing-library/react": "^14.0.0", "ace-builds": "^1.11.2", - "axios": "^1.0.0", + "axios": "^1.6.0", "caniuse-lite": "^1.0.30001495", "moment": "^2.29.4", "react": "^18.0.0", @@ -62,11 +62,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" @@ -151,12 +152,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -284,9 +286,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } @@ -303,23 +305,23 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -439,28 +441,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -501,12 +503,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -514,9 +516,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1841,31 +1843,31 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1874,12 +1876,12 @@ } }, "node_modules/@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3073,12 +3075,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -4817,9 +4819,9 @@ } }, "node_modules/axios": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.0.0.tgz", - "integrity": "sha512-SsHsGFN1qNPFT5QhSoSD37SHDfGyLSW5AESmyLk2JeCMHv5g0I9g0Hz/zQHx2KNe0jGXh2q2hAm7OdkXm360CA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -16001,6 +16003,19 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -17097,11 +17112,12 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" } }, "@babel/compat-data": { @@ -17161,12 +17177,13 @@ } }, "@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "requires": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -17261,9 +17278,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -17274,20 +17291,20 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -17374,22 +17391,22 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -17418,19 +17435,19 @@ } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -18285,39 +18302,39 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -18443,12 +18460,14 @@ "@csstools/postcss-unset-value": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==" + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "requires": {} }, "@csstools/selector-specificity": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==" + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "requires": {} }, "@eslint/eslintrc": { "version": "1.3.2", @@ -19114,12 +19133,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -20144,12 +20163,14 @@ "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} }, "acorn-node": { "version": "1.8.2", @@ -20385,9 +20406,9 @@ "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==" }, "axios": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.0.0.tgz", - "integrity": "sha512-SsHsGFN1qNPFT5QhSoSD37SHDfGyLSW5AESmyLk2JeCMHv5g0I9g0Hz/zQHx2KNe0jGXh2q2hAm7OdkXm360CA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -20484,7 +20505,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -20547,7 +20569,8 @@ "babel-plugin-named-asset-import": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==" + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "requires": {} }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", @@ -21160,7 +21183,8 @@ "css-declaration-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} }, "css-has-pseudo": { "version": "3.0.4", @@ -21227,7 +21251,8 @@ "css-prefers-color-scheme": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==" + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "requires": {} }, "css-select": { "version": "4.3.0", @@ -21326,7 +21351,8 @@ "cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} }, "csso": { "version": "4.2.0", @@ -22229,7 +22255,8 @@ "eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==" + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "requires": {} }, "eslint-plugin-testing-library": { "version": "5.7.2", @@ -22711,7 +22738,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-styles": { "version": "4.3.0", @@ -23249,7 +23277,8 @@ "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} }, "idb": { "version": "7.1.0", @@ -24331,7 +24360,8 @@ "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "requires": {} }, "jest-regex-util": { "version": "27.5.1", @@ -26021,7 +26051,8 @@ "postcss-browser-comments": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==" + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "requires": {} }, "postcss-calc": { "version": "8.2.4", @@ -26119,22 +26150,26 @@ "postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} }, "postcss-double-position-gradients": { "version": "3.1.2", @@ -26156,7 +26191,8 @@ "postcss-flexbugs-fixes": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==" + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "requires": {} }, "postcss-focus-visible": { "version": "6.0.4", @@ -26177,12 +26213,14 @@ "postcss-font-variant": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==" + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "requires": {} }, "postcss-gap-properties": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==" + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "requires": {} }, "postcss-image-set-function": { "version": "4.0.7", @@ -26205,7 +26243,8 @@ "postcss-initial": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==" + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "requires": {} }, "postcss-js": { "version": "4.0.0", @@ -26246,12 +26285,14 @@ "postcss-logical": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==" + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "requires": {} }, "postcss-media-minmax": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==" + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "requires": {} }, "postcss-merge-longhand": { "version": "5.1.6", @@ -26312,7 +26353,8 @@ "postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -26370,7 +26412,8 @@ "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -26463,7 +26506,8 @@ "postcss-page-break": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==" + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "requires": {} }, "postcss-place": { "version": "7.0.5", @@ -26557,7 +26601,8 @@ "postcss-replace-overflow-wrap": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==" + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "requires": {} }, "postcss-selector-not": { "version": "6.0.1", @@ -27057,7 +27102,8 @@ "react-semantic-toasts": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/react-semantic-toasts/-/react-semantic-toasts-0.6.6.tgz", - "integrity": "sha512-sRSL3aikNSVxxhLai785UtSEaSZw3/pxQrPJVmLs83VpAkJyfBhy8RKxxBej0FGr+ah8qCRGHDJUPccNoraHKA==" + "integrity": "sha512-sRSL3aikNSVxxhLai785UtSEaSZw3/pxQrPJVmLs83VpAkJyfBhy8RKxxBej0FGr+ah8qCRGHDJUPccNoraHKA==", + "requires": {} }, "react-shallow-renderer": { "version": "16.15.0", @@ -27448,7 +27494,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -27937,7 +27984,8 @@ "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "requires": {} }, "stylehacks": { "version": "5.1.0", @@ -28329,6 +28377,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "peer": true + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -28661,7 +28715,8 @@ "ws": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==" + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "requires": {} } } }, @@ -29093,7 +29148,8 @@ "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/projects/Canary/ClientApp/package.json b/projects/Canary/ClientApp/package.json index d6014242..c5bbd69b 100644 --- a/projects/Canary/ClientApp/package.json +++ b/projects/Canary/ClientApp/package.json @@ -9,7 +9,7 @@ "@semantic-ui-react/css-patch": "^1.1.2", "@testing-library/react": "^14.0.0", "ace-builds": "^1.11.2", - "axios": "^1.0.0", + "axios": "^1.6.0", "caniuse-lite": "^1.0.30001495", "moment": "^2.29.4", "react": "^18.0.0", diff --git a/projects/Canary/ClientApp/src/App.js b/projects/Canary/ClientApp/src/App.js index 17a67c83..dd6be918 100644 --- a/projects/Canary/ClientApp/src/App.js +++ b/projects/Canary/ClientApp/src/App.js @@ -13,6 +13,7 @@ import { FHIRProducing } from './components/tests/FHIRProducing'; import { RecentTests } from './components/tests/RecentTests'; import { FHIRCreator } from './components/tools/FHIRCreator'; import { FHIRInspector } from './components/tools/FHIRInspector'; +import { MessageInspector } from './components/tools/MessageInspector'; import { FHIRMessageCreator } from './components/tools/FHIRMessageCreator'; import { FHIRMessageSyntaxChecker } from './components/tools/FHIRMessageSyntaxChecker'; import { FHIRSyntaxChecker } from './components/tools/FHIRSyntaxChecker'; @@ -69,6 +70,7 @@ export default class App extends Component { } /> } /> } /> + } /> } /> } /> } /> diff --git a/projects/Canary/ClientApp/src/components/Navigation.js b/projects/Canary/ClientApp/src/components/Navigation.js index 29a9cef7..b6a8f5bd 100644 --- a/projects/Canary/ClientApp/src/components/Navigation.js +++ b/projects/Canary/ClientApp/src/components/Navigation.js @@ -53,6 +53,7 @@ export class Navigation extends Component { + diff --git a/projects/Canary/ClientApp/src/components/dashboard/Dashboard.js b/projects/Canary/ClientApp/src/components/dashboard/Dashboard.js index 0a893204..c90e3ffb 100644 --- a/projects/Canary/ClientApp/src/components/dashboard/Dashboard.js +++ b/projects/Canary/ClientApp/src/components/dashboard/Dashboard.js @@ -162,6 +162,12 @@ export class Dashboard extends Component { description="Create a valid FHIR Message for a user provided FHIR VRDR Record document." route="test-fhir-message-creation" /> + diff --git a/projects/Canary/ClientApp/src/components/misc/Getter.js b/projects/Canary/ClientApp/src/components/misc/Getter.js index 042140be..956c681e 100644 --- a/projects/Canary/ClientApp/src/components/misc/Getter.js +++ b/projects/Canary/ClientApp/src/components/misc/Getter.js @@ -73,27 +73,30 @@ export class Getter extends Component { submitPaste() { var self = this; self.props.updateRecord(this.state.pasteText, null); - this.setState({ loading: true }, () => { - // When POSTing, be clever about if this component was mounted with a "ijeOnly", and detect any leading "<" and "{" - // that would cause the back end to think this was JSON or XML. This allows us to use a more general back end route - // to handle all record types. TODO: Should probably migrate away from an unnecessary back end call here if we know - // there is bad data. - var data = self.state.pasteText; - if (!!this.props.ijeOnly) { - data.replace(/(\r\n|\n|\r)/gm, ''); // Strip any line breaks if IJE! - } - if (!!this.props.ijeOnly && (data[0] === '<' || data[0] === '{')) { - data = 'bogus'; // The IJE catch in the back end will not like this, and will thus throw an error. - } - var endpoint = ''; - if (this.props.returnType) { - endpoint = '/records/return/new'; - } else if(this.props.messageValidation) { - endpoint = '/messages/new' - } else { - endpoint = '/records/new'; - } - axios + this.setState({ loading: true }, () => { + // When POSTing, be clever about if this component was mounted with a "ijeOnly", and detect any leading "<" and "{" + // that would cause the back end to think this was JSON or XML. This allows us to use a more general back end route + // to handle all record types. TODO: Should probably migrate away from an unnecessary back end call here if we know + // there is bad data. + var data = self.state.pasteText; + if (!!this.props.ijeOnly) { + data.replace(/(\r\n|\n|\r)/gm, ''); // Strip any line breaks if IJE! + } + if (!!this.props.ijeOnly && (data[0] === '<' || data[0] === '{')) { + data = 'bogus'; // The IJE catch in the back end will not like this, and will thus throw an error. + } + var endpoint = ''; + if (this.props.returnType) { + endpoint = '/records/return/new'; + } else if (this.props.messageValidation) { + endpoint = '/messages/new' + } else if (this.props.source == 'MessageInspector') { + endpoint = '/messages/inspect'; + } else { + endpoint = '/records/new'; + } + + axios .post(window.API_URL + endpoint + (!!this.props.strict ? '?strict=yes' : '?strict=no'), data) .then(function(response) { self.setState({ loading: false }, () => { diff --git a/projects/Canary/ClientApp/src/components/misc/Record.js b/projects/Canary/ClientApp/src/components/misc/Record.js index ebbb184b..c554254a 100644 --- a/projects/Canary/ClientApp/src/components/misc/Record.js +++ b/projects/Canary/ClientApp/src/components/misc/Record.js @@ -4,7 +4,7 @@ import AceEditor from 'react-ace'; import { toast } from 'react-semantic-toasts'; import 'react-semantic-toasts/styles/react-semantic-alert.css'; import { Button, Form, Icon, Menu, Message, Modal, Popup, Segment, Transition } from 'semantic-ui-react'; -import { Issues } from './Issues'; +import { Issues } from '../misc/Issues'; import 'ace-builds/src-noconflict/mode-json'; import 'ace-builds/src-noconflict/mode-xml'; diff --git a/projects/Canary/ClientApp/src/components/misc/info/Types/DeathRecordType.js b/projects/Canary/ClientApp/src/components/misc/info/Types/DeathRecordType.js index 7f785c59..fb3937aa 100644 --- a/projects/Canary/ClientApp/src/components/misc/info/Types/DeathRecordType.js +++ b/projects/Canary/ClientApp/src/components/misc/info/Types/DeathRecordType.js @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import { Accordion, Icon } from 'semantic-ui-react'; -import { FHIRInfo } from '../FHIRInfo'; +import { FHIRInfo } from '../../info/FHIRInfo'; export class DeathRecordType extends Component { displayName = DeathRecordType.name; diff --git a/projects/Canary/ClientApp/src/components/tools/MessageInspector.js b/projects/Canary/ClientApp/src/components/tools/MessageInspector.js new file mode 100644 index 00000000..85f21ea6 --- /dev/null +++ b/projects/Canary/ClientApp/src/components/tools/MessageInspector.js @@ -0,0 +1,84 @@ +import React, { Component } from 'react'; +import { Link } from 'react-router-dom'; +import { Breadcrumb, Button, Container, Dimmer, Divider, Dropdown, Input, Form, Grid, Header, Icon, Loader, Menu, Message, Statistic, Transition } from 'semantic-ui-react'; +import { Getter } from '../misc/Getter'; +import { FHIRInfo } from '../misc/info/FHIRInfo'; +import { Record } from '../misc/Record'; + +export class MessageInspector extends Component { + displayName = MessageInspector.name; + + constructor(props) { + super(props); + this.state = { ...this.props, record: null, fhirInfo: null, issues: null }; + this.updateRecord = this.updateRecord.bind(this); + } + + updateRecord(record, issues) { + if (record && record.fhirInfo) { + this.setState({ record: null, fhirInfo: null, issues: null }, () => { + this.setState({ record: record, fhirInfo: record.fhirInfo, issues: [] }, () => { + document.getElementById('scroll-to').scrollIntoView({ behavior: 'smooth', block: 'start' }); + }); + }) + } else if (issues && issues.length > 0) { + this.setState({ issues: issues, fhirInfo: null }); + } + } + + render() { + return ( + + + + + + + Dashboard + + + FHIR Message Inspector + + + + + + {!!this.state.fhirInfo && ( + + + +
+ + + Whole message content. Select required format. + + Enter or load the appropriate Connectathon test case data into your EDRS. If your EDRS allows data to be loaded in FHIR or IJE format, you can load the data from the below prompt. + + +
+
+ + + + )} +
+ {!!this.state.issues && this.state.issues.length > 0 && ( + + + + )} + {!!this.state.fhirInfo && ( + + +
+ + +
+
+ + )} + + + ); + } +} diff --git a/projects/Canary/ClientApp/src/index.js b/projects/Canary/ClientApp/src/index.js index 24771fd8..8e809d22 100644 --- a/projects/Canary/ClientApp/src/index.js +++ b/projects/Canary/ClientApp/src/index.js @@ -10,9 +10,9 @@ const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href'); //window.API_URL = 'http://localhost:5000'; window.API_URL = ''; -window.VERSION = '4.0.8'; +window.VERSION = '4.0.10'; window.VERSION_DATE = 'August 15, 2023'; -window.VRDR_VERSION = '4.1.5'; +window.VRDR_VERSION = '4.1.8'; window.VRDR_VERSION_DATE = 'August 15, 2023'; const container = document.getElementById('root'); diff --git a/projects/Canary/Controllers/MessagesController.cs b/projects/Canary/Controllers/MessagesController.cs index 6958071c..3559815c 100644 --- a/projects/Canary/Controllers/MessagesController.cs +++ b/projects/Canary/Controllers/MessagesController.cs @@ -7,12 +7,58 @@ using Newtonsoft.Json; using VRDR; using canary.Models; +using Microsoft.Extensions.Primitives; +using System.Reflection; +using Hl7.Fhir.Model; namespace canary.Controllers { [ApiController] public class MessagesController : ControllerBase { + /// + /// Inspects a message using the contents provided. Returns the message + record and any validation issues. + /// POST Messages/Inspect + /// + [HttpPost("Messages/Inspect")] + public async Task<(Record record, List> issues)> NewPost() + { + string input = await new StreamReader(Request.Body, Encoding.UTF8).ReadToEndAsync(); + + if (!String.IsNullOrEmpty(input)) + { + if (input.Trim().StartsWith("<") || input.Trim().StartsWith("{")) // XML or JSON? + { + BaseMessage message = BaseMessage.Parse(input, false); + + + DeathRecord extracted = new DeathRecord(); + foreach (PropertyInfo property in message.GetType().GetProperties()) + { + if (property.PropertyType == typeof(DeathRecord)) + { + extracted = (DeathRecord)property.GetValue(message); + } + } + string deathRecordString = extracted.ToJSON(); + var messageInspectResults = Record.CheckGet(deathRecordString, false); + + return messageInspectResults; + } + else + { + return (null, new List> + { new Dictionary { { "severity", "error" }, + { "message", "The given input is not JSON or XML." } } } + ); + } + } + else + { + return (null, new List> { new Dictionary { { "severity", "error" }, { "message", "The given input appears to be empty." } } }); + } + } + /// /// Creates a new message using the contents provided. Returns the message and any validation issues. /// POST /api/messages/new diff --git a/projects/Canary/Controllers/RecordsController.cs b/projects/Canary/Controllers/RecordsController.cs index ccc2d7b1..942b8157 100644 --- a/projects/Canary/Controllers/RecordsController.cs +++ b/projects/Canary/Controllers/RecordsController.cs @@ -7,9 +7,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; +using VR; using VRDR; using canary.Models; -using VR; namespace canary.Controllers { diff --git a/projects/Canary/Models/DeathRecordFaker.cs b/projects/Canary/Models/DeathRecordFaker.cs index 7823f994..fb869584 100644 --- a/projects/Canary/Models/DeathRecordFaker.cs +++ b/projects/Canary/Models/DeathRecordFaker.cs @@ -39,6 +39,7 @@ public DeathRecord Generate(bool simple = false) Random random = new Random(); Bogus.Faker faker = new Bogus.Faker("en"); + IJEData dataHelper = MortalityData; // Grab Gender enum value Bogus.DataSets.Name.Gender gender = sex == "Male" ? Bogus.DataSets.Name.Gender.Male : Bogus.DataSets.Name.Gender.Female; diff --git a/projects/Canary/Models/Message.cs b/projects/Canary/Models/Message.cs index adb89c7d..4940c800 100644 --- a/projects/Canary/Models/Message.cs +++ b/projects/Canary/Models/Message.cs @@ -26,6 +26,246 @@ public class Message { "DeathRecord", "A VRDR Death Record Object" }, { "DeathYear", "The year in which the death occurred" }, { "DeathJurisdictionID", "Two character identifier of the jurisdiction in which the death occurred" }, + #region Death Record items + {"AUTOP","Was Autopsy performed" }, + { "AUTOPF","Were Autopsy Findings Available to Complete the Cause of Death?" }, + { "BCNO","Infant Death/Birth Linking - birth certificate number" }, + { "IDOB_YR","Infant Death/Birth Linking - year of birth" }, + { "BSTATE","Infant Death/Birth Linking - State, U.S. Territory or Canadian Province of Birth - code" }, + { "COD1A","Cause of Death Part I Line a" }, + { "INTERVAL1A","Cause of Death Part I Interval, Line a" }, + { "COD1B","Cause of Death Part I Line b" }, + { "INTERVAL1B","Cause of Death Part I Interval, Line b" }, + { "COD1C","Cause of Death Part I Line c" }, + { "INTERVAL1C","Cause of Death Part I Interval, Line c" }, + { "COD1D","Cause of Death Part I Line d" }, + { "INTERVAL1D","Cause of Death Part I Interval, Line d" }, + { "OTHERCONDITION","Cause of Death Part II" }, + { "CERTFIRST","Certifier?s First Name" }, + { "CERTMIDDLE","Certifier?s Middle Name" }, + { "CERTLAST","Certifier?s Last Name" }, + { "CERTSUFFIX","Certifier?s Suffix Name" }, + { "CERTSTNUM","Certifier - Street number" }, + { "CERTPREDIR","Certifier - Pre Directional" }, + { "CERTSTRNAME","Certifier - Street name" }, + { "CERTSTRDESIG","Certifier - Street designator" }, + { "CERTPOSTDIR","Certifier - Post Directional" }, + { "CERTUNITNUM","Certifier - Unit or apt number" }, + { "CERTADDRESS","Long string address for Certifier same as above but allows states to choose the way they capture information." }, + { "CERTCITYTEXT","Certifier - City or Town name" }, + { "CERTSTATECD","State, U.S. Territory or Canadian Province of Certifier - code" }, + { "CERTSTATE","State, U.S. Territory or Canadian Province of Certifier - literal" }, + { "CERTZIP","Certifier - Zip" }, + { "MFILED","Source flag: paper/electronic" }, + { "DOR_YR","Date of Registration?Year" }, + { "DOR_MO","Date of Registration?Month" }, + { "DOR_DY","Date of Registration?Day" }, + { "STATESP","State Specific Data" }, + { "REPLACE (deprecated)","Replacement Record" }, + { "DOD_YR","Date of Death?Year" }, + { "DPLACE","Place of Death" }, + { "DOD_MO","Date of Death?Month" }, + { "DOD_DY","Date of Death?Day" }, + { "TOD","Time of Death" }, + { "PPDATESIGNED","Person Pronouncing Date Signed" }, + { "PPTIME","Person Pronouncing Time Pronounced" }, + { "CERTL","Title of Certifier" }, + { "CERTDATE","Certifier Date Signed" }, + { "DSTATE","State, U.S. Territory or Canadian Province of Death - code" }, + { "COD","County of Death Occurrence" }, + { "DINSTI","Death Institution name" }, + { "ADDRESS_D","Long String address for place of death" }, + { "STNUM_D","Place of death. Street number" }, + { "PREDIR_D","Place of death. Pre Directional" }, + { "STNAME_D","Place of death. Street name" }, + { "STDESIG_D","Place of death. Street designator" }, + { "POSTDIR_D","Place of death. Post Directional" }, + { "CITYTEXT_D","Place of death. City or Town name" }, + { "STATETEXT_D","Place of death. State name literal" }, + { "ZIP9_D","Place of death. Zip code" }, + { "COUNTYTEXT_D","Place of death. County of Death" }, + { "CITYCODE_D","Place of death. City FIPS code" }, + { "LONG_D","Place of death. Longitude" }, + { "LAT_D","Place of Death. Latitude" }, + { "DTHCOUNTRYCD","Country of Death - Code" }, + { "DTHCOUNTRY","Country of Death - Literal" }, + { "GNAME","Decedent?s Legal Name?Given" }, + { "MNAME","Decedent?s Legal Name?Middle" }, + { "LNAME","Decedent?s Legal Name?Last" }, + { "SUFF","Decedent?s Legal Name?Suffix" }, + { "SEX","Sex" }, + { "SSN","Social Security Number" }, + { "DOB_YR","Date of Birth?Year" }, + { "DOB_MO","Date of Birth?Month" }, + { "DOB_DY","Date of Birth?Day" }, + { "BPLACE_CNT","Birthplace?Country" }, + { "BPLACE_ST","State, U.S. Territory or Canadian Province of Birth - code" }, + { "CITYC","Decedent?s Residence?City" }, + { "COUNTYC","Decedent?s Residence?County" }, + { "STATEC","State, U.S. Territory or Canadian Province of Decedent?s residence - code" }, + { "COUNTRYC","Decedent?s Residence?Country" }, + { "LIMITS","Decedent?s Residence?Inside City Limits" }, + { "MARITAL","Marital Status" }, + { "MARITAL_BYPASS","Marital Status?Edit Flag" }, + { "SPOUSELV","Decedent?s spouse living at decedent?s DOD?" }, + { "STNUM_R","Decedent?s Residence - Street number" }, + { "PREDIR_R","Decedent?s Residence - Pre Directional" }, + { "STNAME_R","Decedent?s Residence - Street name" }, + { "STDESIG_R","Decedent?s Residence - Street designator" }, + { "POSTDIR_R","Decedent?s Residence - Post Directional" }, + { "UNITNUM_R","Decedent?s Residence - Unit or apt number" }, + { "CITYTEXT_R","Decedent?s Residence - City or Town name" }, + { "ZIP9_R","Decedent?s Residence - ZIP code" }, + { "COUNTYTEXT_R","Decedent?s Residence - County" }, + { "STATETEXT_R","Decedent?s Residence - State name" }, + { "COUNTRYTEXT_R","Decedent?s Residence - COUNTRY name" }, + { "ADDRESS_R","Long string address for decedent?s place of residence same as above but allows states to choose the way they capture information." }, + { "DMIDDLE","Middle Name of Decedent" }, + { "DMAIDEN","Decedent?s Maiden Name" }, + { "DBPLACECITYCODE","Decedent?s Birth Place City - Code" }, + { "DBPLACECITY","Decedent?s Birth Place City - Literal" }, + { "INFORMRELATE","Informant?s Relationship" }, + { "STATEBTH","State, U.S. Territory or Canadian Province of Birth - literal" }, + { "MARITAL_DESCRIP","Marital Descriptor" }, + { "AGETYPE","Decedent?s Age?Type" }, + { "AGE","Decedent?s Age?Units" }, + { "AGE_BYPASS","Decedent?s Age?Edit Flag" }, + { "DISP","Method of Disposition" }, + { "DEDUC","Decedent?s Education" }, + { "DEDUC_BYPASS","Decedent?s Education?Edit Flag" }, + { "FLNAME","Father?s Surname" }, + { "DDADF","Father?s First Name" }, + { "DDADMID","Father?s Middle Name" }, + { "FATHERSUFFIX","Father?s Suffix" }, + { "ARMEDF","Decedent ever served in Armed Forces?" }, + { "DMOMF","Mother?s First Name" }, + { "DMOMMID","Mother?s Middle Name" }, + { "DMOMMDN","Mother?s Maiden Surname" }, + { "MOTHERSSUFFIX","Mother?s Suffix" }, + { "SPOUSEF","Spouse?s First Name" }, + { "SPOUSEL","Husband?s Surname/Wife?s Maiden Last Name" }, + { "SPOUSEMIDNAME","Spouse?s Middle Name" }, + { "SPOUSESUFFIX","Spouse?s Suffix" }, + { "PREG","Pregnancy" }, + { "PREG_BYPASS","If Female?Edit Flag: From EDR only" }, + { "OCCUP","Occupation ? Literal" }, + { "INDUST","Industry ? Literal" }, + { "OCCUPC4","Occupation ? 4 digit Code" }, + { "INDUSTC4","Industry ? 4 digit Code" }, + { "DISPSTATECD","State, U.S. Territory or Canadian Province of Disposition - code" }, + { "DISPSTATE","Disposition State or Territory - Literal" }, + { "DISPCITYCODE","Disposition City - Code" }, + { "DISPCITY","Disposition City - Literal" }, + { "REFERRED","Was case Referred to Medical Examiner/Coroner?" }, + { "FUNFACNAME","Funeral Facility Name" }, + { "FUNFACSTNUM","Funeral Facility - Street number" }, + { "FUNFACPREDIR","Funeral Facility - Pre Directional" }, + { "FUNFACSTRNAME","Funeral Facility - Street name" }, + { "FUNFACSTRDESIG","Funeral Facility - Street designator" }, + { "FUNPOSTDIR","Funeral Facility - Post Directional" }, + { "FUNUNITNUM","Funeral Facility - Unit or apt number" }, + { "FUNFACADDRESS","Long string address for Funeral Facility same as above but allows states to choose the way they capture information." }, + { "FUNCITYTEXT","Funeral Facility - City or Town name" }, + { "FUNSTATECD","State, U.S. Territory or Canadian Province of Funeral Facility - code" }, + { "FUNSTATE","State, U.S. Territory or Canadian Province of Funeral Facility - literal" }, + { "FUNZIP","Funeral Facility - ZIP" }, + { "DOI_MO","Date of injury?month" }, + { "DOI_DY","Date of injury?day" }, + { "DOI_YR","Date of injury?year" }, + { "TOI_HR","Time of injury" }, + { "WORKINJ","Injury at work" }, + { "TOI_UNIT","Time of Injury Unit" }, + { "POILITRL","Place of Injury- literal" }, + { "HOWINJ","Describe How Injury Occurred" }, + { "TRANSPRT","If Transportation Accident, Specify" }, + { "COUNTYTEXT_I","County of Injury - literal" }, + { "COUNTYCODE_I","County of Injury code" }, + { "CITYTEXT_I","Town/city of Injury - literal" }, + { "CITYCODE_I","Town/city of Injury code" }, + { "STATECODE_I","State, U.S. Territory or Canadian Province of Injury - code" }, + { "LONG_I","Place of injury. Longitude" }, + { "LAT_I","Place of injury. Latitude" }, + { "STINJURY","State, U.S. Territory or Canadian Province of Injury - literal" }, + { "DETHNIC1","Decedent of Hispanic Origin??Mexican" }, + { "DETHNIC2","Decedent of Hispanic Origin??Puerto Rican" }, + { "DETHNIC3","Decedent of Hispanic Origin??Cuban" }, + { "DETHNIC4","Decedent of Hispanic Origin??Other" }, + { "DETHNIC5","Decedent of Hispanic Origin??Other, Literal" }, + { "RACE1","Decedent?s Race?White" }, + { "RACE2","Decedent?s Race?Black or African American" }, + { "RACE3","Decedent?s Race?American Indian or Alaska Native" }, + { "RACE4","Decedent?s Race?Asian Indian" }, + { "RACE5","Decedent?s Race?Chinese" }, + { "RACE6","Decedent?s Race?Filipino" }, + { "RACE7","Decedent?s Race?Japanese" }, + { "RACE8","Decedent?s Race?Korean" }, + { "RACE9","Decedent?s Race?Vietnamese" }, + { "RACE10","Decedent?s Race?Other Asian" }, + { "RACE11","Decedent?s Race?Native Hawaiian" }, + { "RACE12","Decedent?s Race?Guamanian or Chamorro" }, + { "RACE13","Decedent?s Race?Samoan" }, + { "RACE14","Decedent?s Race?Other Pacific Islander" }, + { "RACE15","Decedent?s Race?Other" }, + { "RACE16","Decedent?s Race?First American Indian or Alaska Native Literal" }, + { "RACE17","Decedent?s Race?Second American Indian or Alaska Native Literal" }, + { "RACE18","Decedent?s Race?First Other Asian Literal" }, + { "RACE19","Decedent?s Race?Second Other Asian Literal" }, + { "RACE20","Decedent?s Race?First Other Pacific Islander Literal" }, + { "RACE21","Decedent?s Race?Second Other Pacific Islander Literal" }, + { "RACE22","Decedent?s Race?First Other Literal" }, + { "RACE23","Decedent?s Race?Second Other Literal" }, + { "RACE_MVR","Decedent?s Race?Missing" }, + { "MANNER","Manner of Death" }, + { "PLACE1_1","Blank for One-Byte Field 1" }, + { "PLACE1_2","Blank for One-Byte Field 2" }, + { "PLACE1_3","Blank for One-Byte Field 3" }, + { "PLACE1_4","Blank for One-Byte Field 4" }, + { "PLACE1_5","Blank for One-Byte Field 5" }, + { "PLACE1_6","Blank for One-Byte Field 6" }, + { "PLACE8_1","Blank for Eight-Byte Field 1" }, + { "PLACE8_2","Blank for Eight-Byte Field 2" }, + { "PLACE8_3","Blank for Eight-Byte Field 3" }, + { "PLACE20","Blank for Twenty-Byte Field" }, + { "SUR_MO","Surgery Date?month" }, + { "SUR_DY","Surgery Date?day" }, + { "SUR_YR","Surgery Date?year" }, + { "TOBAC","Did Tobacco Use Contribute to Death?" }, + { "INACT","Activity at time of death (computer generated)" }, + { "ACME_UC","ACME Underlying Cause" }, + { "MAN_UC","Manual Underlying Cause" }, + { "RAC","Record-axis codes" }, + { "EAC","Entity-axis codes" }, + { "INJPL","Place of Injury (computer generated)" }, + { "RACE1E","First Edited Code" }, + { "RACE2E","Second Edited Code" }, + { "RACE3E","Third Edited Code" }, + { "RACE4E","Fourth Edited Code" }, + { "RACE5E","Fifth Edited Code" }, + { "RACE6E","Sixth Edited Code" }, + { "RACE7E","Seventh Edited Code" }, + { "RACE8E","Eighth Edited Code" }, + { "RACE16C","First American Indian Code" }, + { "RACE17C","Second American Indian Code" }, + { "RACE18C","First Other Asian Code" }, + { "RACE19C","Second Other Asian Code" }, + { "RACE20C","First Other Pacific Islander Code" }, + { "RACE21C","Second Other Pacific Islander Code" }, + { "RACE22C","First Other Race Code" }, + { "RACE23C","Second Other Race Code" }, + { "DETHNICE","Hispanic" }, + { "DETHNIC5C","Hispanic Code for Literal" }, + { "R_YR","Receipt date ? Year" }, + { "R_MO","Receipt date ? Month" }, + { "R_DY","Receipt date ? Day" }, + { "CS (TRX Field, no IJE Mapping)","coder status" }, + { "SHIP (TRX Field, no IJE Mapping)","shipment number" }, + { "INT_REJ","Intentional Reject" }, + { "SYS_REJ","Acme System Reject Codes" }, + { "TRX_FLG","Transax conversion flag: Computer Generated" }, + { "FILENO","Certificate Number" }, + { "AUXNO","Auxiliary State file number" }, + { "AUXNO2","Auxiliary State file number" }, + #endregion }; private static String[] validateForPresence = new String[] { diff --git a/projects/Canary/Models/Record.cs b/projects/Canary/Models/Record.cs index e9866bf9..df18b7fa 100644 --- a/projects/Canary/Models/Record.cs +++ b/projects/Canary/Models/Record.cs @@ -3,11 +3,11 @@ using System.Linq; using System.Reflection; using Microsoft.EntityFrameworkCore; +using VR; using VRDR; using Newtonsoft.Json; using System.IO; using System.Text.Json.Nodes; -using VR; namespace canary.Models { diff --git a/projects/Canary/Models/Test.cs b/projects/Canary/Models/Test.cs index 529574bf..07e05d7b 100644 --- a/projects/Canary/Models/Test.cs +++ b/projects/Canary/Models/Test.cs @@ -7,8 +7,8 @@ using Hl7.FhirPath; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using VRDR; using VR; +using VRDR; namespace canary.Models {