{"_id":"@amida-tech/blue-button-match","_rev":"4-dbccd7875c8773f01e77cf473512f5c7","name":"@amida-tech/blue-button-match","dist-tags":{"latest":"1.5.5"},"versions":{"1.5.1":{"name":"@amida-tech/blue-button-match","version":"1.5.1","description":"Automatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries).","main":"/index.js","directories":{"doc":"doc","lib":"lib"},"scripts":{"prepublish":"echo \"Prepublish Build script should go here.\"","test":"grunt test"},"author":{"name":"Dmitry Kachaev","email":"dmitry@amida-tech.com"},"contributors":[{"name":"Matthew McCall","email":"matt@amida-tech.com"},{"name":"Afsin Ustundag","email":"afsin.ustundag@us.pwc.com"},{"name":"Matt Martz","email":"matt.martz@amida-tech.com"}],"license":"Apache-2.0","engines":{"node":">= 14.19.1"},"dependencies":{"@amida-tech/blue-button-meta":"^1.7.2","deep-equal":"^2.0.5","libxmljs":"^0.19.7","moment":"^2.29.3","underscore":"^1.13.3","uuid":"^8.3.2","winston":"^3.7.2"},"devDependencies":{"@amida-tech/blue-button":"^1.10.4","grunt":"^1.5.2","grunt-contrib-jshint":"^3.2.0","grunt-contrib-watch":"^1.1.0","grunt-express-server":"0.5.4","grunt-jsbeautifier":"^0.2.13","grunt-run":"^0.8.1","jest":"^27.5.1"},"repository":{"type":"git","url":"git+https://github.com/amida-tech/blue-button-match.git"},"keywords":["bluebutton","matching","deduplication"],"bugs":{"url":"https://github.com/amida-tech/blue-button-match/issues"},"homepage":"https://github.com/amida-tech/blue-button-match","gitHead":"be67cea54f82b7dc077b7cabade93170581bd2ce","_id":"@amida-tech/blue-button-match@1.5.1","_nodeVersion":"16.14.2","_npmVersion":"8.6.0","dist":{"integrity":"sha512-TjCAfUmYk1hG/W638czFh0FTlx0rbX22zKGqryE1gt4bjVfQsux/4tkS8KLDFqfybGSm94QQwo7GrhBFsIEnxg==","shasum":"b5483da4faec9267cb7188ef0c2ba5b8506ee2dd","tarball":"https://registry.npmjs.org/@amida-tech/blue-button-match/-/blue-button-match-1.5.1.tgz","fileCount":144,"unpackedSize":2526188,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpggcQIkJbV3WZFYOIpF4s3EhI8iYkj4JX0Q9Cf11MwQIhAJlTx+6hY2c0GtDZGBWGmTa+ebCl94skI/0T5qYkM6s2"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJibAD7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpRNA//bAw3f/+/5TeihPeMNlGy8acEmtfbbE8iZ6sUmSSzsCiDqK1U\r\nZI80sGe6ziiQtG8TBNrih+ew9/dTDrA8vUBesjEUlhpixfdcP+QtZb5c/7wN\r\nKjyHDpeieMhH1N+FQ4MpzwP29vYqwuYGzYaNY7Tnd1XxaIRnKbzHeah9ITLg\r\nRKX1LZEx1lMYX3etOXOKKP7aNXkuxL34vO7iZtuPKrxQgaZyJPr09vfxr8hP\r\no0SZyNM2BcsWssn5q8jS41DFmSlre4Fo9RWkyoDulDsi/WNykfOIcJvNyNqW\r\nTRiYKit60hxc+r3CpS9JQbK1PnFVzq/kUqH6TM8R2arpXD6yBIW6VpT6wuCa\r\nqNS5Sy4v55RtJbI4V+QoMrMbwIHXQANt1c4pbTr0/czBvV2lCqTAAzAbYdLG\r\nAA7mAbSXZzTvEADhVg8nVjP4svQLShdVPmGOzPEaUiTozktyZhdKwcQCbUVn\r\njW62rn6H7dPCQl9T2TX9fTvHQnbaArSvnB44KzKUj5d0+C1z1dc1aMA4e/oH\r\nozH/Ca0LLljlWFWjkDTRm72OVnloCFhhQ9+RQo6xiSjHU9+fPyVX5ayVMB00\r\nSwwqN81eXEUwKS+KnzxeMe6ZvIJardGA1nEaEyut/rSXvNMDDs65t7ovy35x\r\nnH7PlpPfyBVc29RjLthJWD6YlXzub09RTWU=\r\n=T9mc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"manhydra","email":"marc.sylvestre@manhydra.com"},"maintainers":[{"name":"manhydra","email":"marc.sylvestre@manhydra.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/blue-button-match_1.5.1_1651245307710_0.9967291087583505"},"_hasShrinkwrap":false},"1.5.2":{"name":"@amida-tech/blue-button-match","version":"1.5.2","description":"Automatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries).","main":"/index.js","directories":{"doc":"doc","lib":"lib"},"scripts":{"prepublish":"echo \"Prepublish Build script should go here.\"","test":"grunt test"},"author":{"name":"Dmitry Kachaev","email":"dmitry@amida-tech.com"},"contributors":[{"name":"Matthew McCall","email":"matt@amida-tech.com"},{"name":"Afsin Ustundag","email":"afsin.ustundag@us.pwc.com"},{"name":"Matt Martz","email":"matt.martz@amida-tech.com"}],"license":"Apache-2.0","engines":{"node":">= 14.19.3"},"dependencies":{"@amida-tech/blue-button-meta":"^1.7.3","deep-equal":"^2.0.5","libxmljs":"^0.19.10","moment":"^2.29.3","underscore":"^1.13.3","uuid":"^8.3.2","winston":"^3.7.2"},"devDependencies":{"@amida-tech/blue-button":"^1.10.6","grunt":"^1.5.3","grunt-contrib-jshint":"^3.2.0","grunt-contrib-watch":"^1.1.0","grunt-express-server":"0.5.4","grunt-jsbeautifier":"^0.2.13","grunt-run":"^0.8.1","jest":"^27.5.1"},"repository":{"type":"git","url":"git+https://github.com/amida-tech/blue-button-match.git"},"keywords":["bluebutton","matching","deduplication"],"bugs":{"url":"https://github.com/amida-tech/blue-button-match/issues"},"homepage":"https://github.com/amida-tech/blue-button-match","gitHead":"4ce3c3a96d9d4147859b3b487fb858a636db3d70","_id":"@amida-tech/blue-button-match@1.5.2","_nodeVersion":"16.14.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-ma2ESAemtupCN1WJsuID+noDmlfbDr70WpJ5aQ7vrItnc3PVoJMxzoMpLwUfc1mbfslv4k6ygkikdQ38wWSXCQ==","shasum":"e6a265a25d8d4ccae333f335bf4ea3be129d5e1c","tarball":"https://registry.npmjs.org/@amida-tech/blue-button-match/-/blue-button-match-1.5.2.tgz","fileCount":144,"unpackedSize":2526278,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdm1zSa4ZD2043xsbTBeY/uBiHmlF5JKsSaSsDHzdPLwIgDh3UQK0wQ1QZNCcmljN0LTd48KF6bdzjQcJFHOmNpU4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilo1JACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpthA//TRaAd94YDPCkuPDdSPFL0aGA/vZDNMVwZ51HBeuKci312/ce\r\ndVGdg8i1jqmHfPwcaZFiRXrShsM4PsCVhIveu9McxD7sVgA2WiRkoXb4R6zo\r\nPriyz5hxXKymfiZRtnlpp1LRwapZkz/2eg+RXxPIi7ROP1+dSnYYZkssvh4K\r\nkudvO8b8Y8iDnAoIFK+ZKaKegzh2jTHMx2qwNWC0Jdmr52sjDhja/MnERwCf\r\n2Qohh3hiY74JyS79PftjqNAqC1TzPlIZH1sPOAdcaPewQ1laGct3KOAX/GSX\r\n1YEo1BmB8n0GmLFckeCgyIGyiYWRSpdQZbc9C2b9AhlJsN8dO0stBM/iJJiT\r\nUOLZXKPn8n93R/Dy78q+bThh+HfeFltPnpAdi2ZDu1edtdofiM2YQYeIieJL\r\nrAC/umRYgQy5H/hf5oZdGnuO2iRJiarTNf19rz0/OZopGpTrjOrEOzhbl5Yg\r\nzQi3s43DMAIL3eTzGK/lCO1Ce3d1lkCK2bBA9PnMj3rkVBjjpU64yC7Wpbrt\r\n0YMkYOJ8gIHP8zOUcnREddcJO5Gxll+Lszwyb6RViTLGoEiQz2wj9W2Xv9K0\r\npKnWNJLEK9sVQfbx9yVw1V5XP6XpSwsJ9DjHUf85Gq1B7lPeBwJoNpBe+VtC\r\nKXxQQyQDI1VEw2nBqnLx4sZMQ2eSH7GWQcA=\r\n=Dm8H\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"manhydra","email":"marc.sylvestre@manhydra.com"},"maintainers":[{"name":"manhydra","email":"marc.sylvestre@manhydra.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/blue-button-match_1.5.2_1654033737573_0.6570977964465354"},"_hasShrinkwrap":false},"1.5.3":{"name":"@amida-tech/blue-button-match","version":"1.5.3","description":"Automatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries).","main":"/index.js","directories":{"doc":"doc","lib":"lib"},"scripts":{"prepublish":"echo \"Prepublish Build script should go here.\"","test":"grunt test"},"author":{"name":"Dmitry Kachaev","email":"dmitry@amida-tech.com"},"contributors":[{"name":"Matthew McCall","email":"matt@amida-tech.com"},{"name":"Afsin Ustundag","email":"afsin.ustundag@us.pwc.com"},{"name":"Matt Martz","email":"matt.martz@amida-tech.com"}],"license":"Apache-2.0","engines":{"node":">= 14.19.3"},"dependencies":{"@amida-tech/blue-button-meta":"^1.7.3","deep-equal":"^2.0.5","libxmljs":"^0.19.10","moment":"^2.29.4","underscore":"^1.13.4","uuid":"^8.3.2","winston":"^3.8.1"},"devDependencies":{"@amida-tech/blue-button":"^1.10.8","grunt":"^1.5.3","grunt-contrib-jshint":"^3.2.0","grunt-contrib-watch":"^1.1.0","grunt-express-server":"0.5.4","grunt-jsbeautifier":"^0.2.13","grunt-run":"^0.8.1","jest":"^27.5.1"},"repository":{"type":"git","url":"git+https://github.com/amida-tech/blue-button-match.git"},"keywords":["bluebutton","matching","deduplication"],"bugs":{"url":"https://github.com/amida-tech/blue-button-match/issues"},"homepage":"https://github.com/amida-tech/blue-button-match","gitHead":"081c750c7cda176143da8528fde4164beea07539","_id":"@amida-tech/blue-button-match@1.5.3","_nodeVersion":"16.14.2","_npmVersion":"8.12.1","dist":{"integrity":"sha512-3/nLaS0fffj7jnM5LSAviDfbGLWEemehKgNjwMPgDNs3UT0dZFySL0/R529DrGYRlZO+dG+yt45z06Opch3+kw==","shasum":"560c1fc626945b3ff573216f68c0fcb5aed663ff","tarball":"https://registry.npmjs.org/@amida-tech/blue-button-match/-/blue-button-match-1.5.3.tgz","fileCount":144,"unpackedSize":2526274,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFQdtFW5Vus1INOnQxJTMjjHMzhR8bpy56QjB6G2DD7yAiEAntR6fQCk7kmVy8hnxuqOkPldSnm/NZZ3K0zyaeDVKm0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6YvTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2NA/7BH9W7r7CMwfhoQsvreI4b+AVrbfvWc4TqLg00ZjOvgFZcjft\r\nW6/iosxg1pyJ7npxZoqniKJ/b7rDoSMUtZOmVys6g2jkkLkg74sKHTWI9hMk\r\nfBiwcOe0+SMQrAdPGBu2ue+wf+ZGwZJvt7ch0TgWc0bhzgHQyZg09A2/rq+I\r\n4wqBtIMDOJD6SViCYCY59cIRBNrFFu3z82yoyR4snLhmbAeoHdS7PlmWQksL\r\nZz/rg+8VF02c040EEGx0QM74Re0wp7nuUdAdYE2Ksnz/CtryrSi27Nbclcg5\r\nT+Q+ktMUXqxcgLVTojvbsZZPWd90AedFBCIW49xpq0OqsdmU/znkD4/4ueiu\r\nX1ZfdxQhp+4ir2cSkX4mx+2XHNxIgIsDxHRlJIuhqmI+6rx5txkhyu/tBbPf\r\nonyEuZ8bNwIGs4lBaw1crE4ke+wJAzXePoAxiW+A2HFBG1GFrVFJ79gGLS37\r\nqbUojWtqI0RA/N5lsnZPGjxLOk1949LHQkMFXcciokyRtHit9dhpVLM01g7b\r\ndJv+oKc3hgFE8Y77PRb+6Hruk1Ja+M9wYiARUcCuTlIWC9P1Ci5DJLxdwp+B\r\ns4+3m4cUJDJDmz+RjC/yOYREwpdV6Gw1+gpDKKr3AcDj32OzrJNsLopOwb8i\r\nc2n7Jhf/XqBuexcu+4gthchpujS7DwWIC1c=\r\n=mGwD\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"manhydra","email":"marc.sylvestre@manhydra.com"},"maintainers":[{"name":"manhydra","email":"marc.sylvestre@manhydra.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/blue-button-match_1.5.3_1659472851041_0.42649991965052814"},"_hasShrinkwrap":false},"1.5.4":{"name":"@amida-tech/blue-button-match","version":"1.5.4","description":"Automatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries).","main":"/index.js","directories":{"doc":"doc","lib":"lib"},"scripts":{"prepublish":"echo \"Prepublish Build script should go here.\"","test":"grunt test"},"author":{"name":"Dmitry Kachaev","email":"dmitry@amida-tech.com"},"contributors":[{"name":"Matthew McCall","email":"matt@amida-tech.com"},{"name":"Afsin Ustundag","email":"afsin.ustundag@us.pwc.com"},{"name":"Matt Martz","email":"matt.martz@amida-tech.com"}],"license":"Apache-2.0","engines":{"node":">= 14.19.3"},"dependencies":{"@amida-tech/blue-button-meta":"^1.7.3","deep-equal":"^2.1.0","@manhydra/libxmljs":"^0.19.12","moment":"^2.29.4","underscore":"^1.13.6","uuid":"^9.0.0","winston":"^3.8.2"},"devDependencies":{"@amida-tech/blue-button":"^1.10.9","grunt":"^1.5.3","grunt-contrib-jshint":"^3.2.0","grunt-contrib-watch":"^1.1.0","grunt-express-server":"0.5.4","grunt-jsbeautifier":"^0.2.13","grunt-run":"^0.8.1","jest":"^29.3.1"},"repository":{"type":"git","url":"git+https://github.com/amida-tech/blue-button-match.git"},"keywords":["bluebutton","matching","deduplication"],"bugs":{"url":"https://github.com/amida-tech/blue-button-match/issues"},"homepage":"https://github.com/amida-tech/blue-button-match","gitHead":"df4dbb26c2560b6eb15e0ba7a791f4eab3627c7c","_id":"@amida-tech/blue-button-match@1.5.4","_nodeVersion":"16.18.1","_npmVersion":"9.1.2","dist":{"integrity":"sha512-F6Js82/j0FLJDM4ouTSotsFlhC3r7RBvfJDo6ZY+ayme8lpYAbDtRxhGbHi6PpOTN68ioLwPgwrt/WzVmayPog==","shasum":"356337a49c5185aa764cbdcad57dbc5f9667c22f","tarball":"https://registry.npmjs.org/@amida-tech/blue-button-match/-/blue-button-match-1.5.4.tgz","fileCount":144,"unpackedSize":2526284,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBGYMpMQJKU/30ZT0ptM/9AWSP4qgycWkt4cg7hgM9uAiEA1qQebxf17S29p7Lxf9wyOy0mvlTVo/rkqrvqt5ggUAw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjhS05ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+gw/5ASE7Ra4YvhmhGYy3LActt1VgVpR4bpqcwQwFlgdMKm6uLYz5\r\n/PZLfyQ+zk5VemeHKblmT2fF4N0FJLJCTt02zlNFAx9ga8377n+BLpyN2zKL\r\nxY+0MynlilmPeJvYWuzHXmpKReKfbAbdLwH1DRN3qdrqXXxH6kMvden0Nr1R\r\ncAZL79SspENPSL11X3S7THOm3bzPyuFkE4321Q78N1Mmdf0HWqKxInIoZH77\r\n2TlFd1lL+eF8giHPnFLi5qDeuEncpW+KaCUm0Dc4bJm+RODMUWtVv24mWxwi\r\nslHL8bKRkxp8guOZOQ+5tE1+ciy4F1ju0HOrFGSDqePejcAWsKDnQCuXXpuJ\r\nZ8q54oOQ+KF9bbFcchT+OkeT18Y/DItHE92Y6iqPTDRAbTu98Cs9LtZ4k7oT\r\nhQSxvzO3375Q+Oyjsa8N2IoEmeXs5Q+yrgwfBK6iiK0xctoa1Z7KMyiS9rGQ\r\nDdFL7bh4GErGPB0gKHEqV/Pqsyc5silsDEhCiP70iBflnRFRKSDvAZVKQK4p\r\ndGmwfNI9/9IXedY4FrmBa/JtIf3g/8hvOFzUE85nVY8MMLJgh4ZWvDSlGf0m\r\nmNpPfFmNGe9e0md1lzk1VcJuobV3mFo5BuuHRKZsaMHKONwHhbxFKuT7dvPN\r\nbdTJHQmNQTcp/aS7O51VC+uNx2gSW9EnnLg=\r\n=wZsC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"manhydra","email":"marc.sylvestre@manhydra.com"},"maintainers":[{"name":"manhydra","email":"marc.sylvestre@manhydra.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/blue-button-match_1.5.4_1669672248738_0.3788727223834325"},"_hasShrinkwrap":false},"1.5.5":{"name":"@amida-tech/blue-button-match","version":"1.5.5","description":"Automatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries).","main":"/index.js","directories":{"doc":"doc","lib":"lib"},"scripts":{"test":"grunt run:test","coverage":"grunt run:coverage"},"author":{"name":"Dmitry Kachaev","email":"dmitry@amida-tech.com"},"contributors":[{"name":"Matthew McCall","email":"matt@amida-tech.com"},{"name":"Afsin Ustundag","email":"afsin.ustundag@us.pwc.com"},{"name":"Matt Martz","email":"matt.martz@amida-tech.com"}],"license":"Apache-2.0","engines":{"node":">= 14.19.3"},"dependencies":{"@amida-tech/blue-button-meta":"^1.7.5","deep-equal":"^2.2.3","@manhydra/libxmljs":"^0.19.12","moment":"^2.30.1","underscore":"^1.13.6","uuid":"^9.0.1","winston":"^3.13.0"},"devDependencies":{"@amida-tech/blue-button":"^1.10.10","grunt":"^1.6.1","grunt-contrib-jshint":"^3.2.0","grunt-contrib-watch":"^1.1.0","grunt-express-server":"0.5.4","grunt-jsbeautifier":"^0.2.13","grunt-run":"^0.8.1","jest":"^29.7.0"},"repository":{"type":"git","url":"git+https://github.com/amida-tech/blue-button-match.git"},"keywords":["bluebutton","matching","deduplication"],"bugs":{"url":"https://github.com/amida-tech/blue-button-match/issues"},"homepage":"https://github.com/amida-tech/blue-button-match","_id":"@amida-tech/blue-button-match@1.5.5","gitHead":"f22bc097f79b96712217a309cde29650ae073860","_nodeVersion":"18.20.1","_npmVersion":"10.7.0","dist":{"integrity":"sha512-DDiHEk8UnQZVVJRCMLav0SOY+2+Rc7Ugootc5nj8yERa8kdU7gxs+w7J8mstIM6WPJqFWLprIYhogS2uk2qOQA==","shasum":"18fcecb663bec13a8ce744f2f08d70f401e10642","tarball":"https://registry.npmjs.org/@amida-tech/blue-button-match/-/blue-button-match-1.5.5.tgz","fileCount":145,"unpackedSize":2526696,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDu/NLCntesetJPNDhH9KF9zb1wlt/Far2QX+T2OUs6yQIhAJ4niVW16BfEj7M+gP9nUWn0QVzhXCCbn+1Yum80l6Vu"}]},"_npmUser":{"name":"manhydra","email":"marc.sylvestre@manhydra.com"},"maintainers":[{"name":"manhydra","email":"marc.sylvestre@manhydra.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/blue-button-match_1.5.5_1715368193822_0.948029884640782"},"_hasShrinkwrap":false}},"time":{"created":"2022-04-29T15:15:07.631Z","1.5.1":"2022-04-29T15:15:07.870Z","modified":"2024-05-10T19:09:54.243Z","1.5.2":"2022-05-31T21:48:57.777Z","1.5.3":"2022-08-02T20:40:51.382Z","1.5.4":"2022-11-28T21:50:49.020Z","1.5.5":"2024-05-10T19:09:54.058Z"},"maintainers":[{"name":"manhydra","email":"marc.sylvestre@manhydra.com"}],"description":"Automatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries).","homepage":"https://github.com/amida-tech/blue-button-match","keywords":["bluebutton","matching","deduplication"],"repository":{"type":"git","url":"git+https://github.com/amida-tech/blue-button-match.git"},"contributors":[{"name":"Matthew McCall","email":"matt@amida-tech.com"},{"name":"Afsin Ustundag","email":"afsin.ustundag@us.pwc.com"},{"name":"Matt Martz","email":"matt.martz@amida-tech.com"}],"author":{"name":"Dmitry Kachaev","email":"dmitry@amida-tech.com"},"bugs":{"url":"https://github.com/amida-tech/blue-button-match/issues"},"license":"Apache-2.0","readme":"blue-button-match\n=================\n\nAutomatic matching of Blue Button JSON data (detection of new, duplicate and partial match entries)\n\n[![NPM](https://nodei.co/npm/@amida-tech/blue-button-match.png)](https://nodei.co/npm/@amida-tech/blue-button-match/)\n\n[![Build Status](https://travis-ci.org/amida-tech/blue-button-match.svg)](https://travis-ci.org/amida-tech/blue-button-match)\n[![Coverage Status](https://coveralls.io/repos/amida-tech/blue-button-match/badge.png)](https://coveralls.io/r/amida-tech/blue-button-match)\n[![Dependency Status](https://david-dm.org/amida-tech/blue-button-match.svg)](https://david-dm.org/amida-tech/blue-button-match)\n\n## Library interfaces/APIs\n\nThis library exposes methods for matching entire health records as well as lower level methods for matching sections of health records.\n\nThis library provides the following functionality\n\n- Match two health records in blue-button JSON format\n- Match individual sections of above\n\n## Quick up and running guide\n\n### Prerequisites\n\n- Node.js (v14.19+) and NPM\n- Grunt.js\n\n```sh\n# Install dependencies\nnpm i\n\n# Install grunt\nnpm i -g grunt\n\n# Test\ngrunt\n```\n\n### Usage example\n\nRequire blue-button-match module\n\n```javascript\nvar match = require(\"./index.js\") \nvar bb = require(\"@amida-tech/blue-button\");\n\nvar recordA = bb.parseString(\"record A\");\nvar recordB = bb.parseString(\"record B\");\n\nvar result = match.match(recordA.data, recordB.data);\n\nconsole.log(result);\n\n````\n\nThis will produce a match object looking like this:\n\n```json\n{\n  \"match\": {\n    \"allergies\" : [\n      {\n        \"match\": \"new\",\n        \"percent\": 0,\n        \"src_id\": \"0\",\n        \"dest_id\": \"0\",\n        \"dest\": \"dest\"\n      },\n      {\n        \"match\": \"new\",\n        \"percent\": 0,\n        \"src_id\": \"1\",\n        \"dest_id\": \"0\",\n        \"dest\": \"dest\"\n      },\n      {\n        \"match\": \"new\",\n        \"percent\": 0,\n        \"src_id\": \"2\",\n        \"dest_id\": \"0\",\n        \"dest\": \"dest\"\n      },\n      {\n        \"match\": \"new\",\n        \"percent\": 0,\n        \"src_id\": \"0\",\n        \"dest_id\": \"1\",\n        \"dest\": \"src\"\n      },\n        ...\n      }\n    ],\n    \"medications\" : [...],\n    \"demographics\" : [...]\n    ...\n  },\n  \"meta\": {\n    \"version\" : \"0.0.1\"\n\t},\n\t\"errors\": []\n}\n```\n\n### Matching record explanation\n\nMatch element can be `{\"match\" : \"duplicate\", \"percent\": 100}`, `{\"match\" : \"new\", \"percent: 0\"}` or `{\"match\" : \"partial\", \"percent\": 50}`.\n\nPartial match is expressed in percent and can range from `1` to `99`.  Percent is included in the duplicate and new objects as well for range based calculations, but will always equal `100` or `0` respectively.\n\n\nElement attribute `dest_id` refers to the element position (index) in the related section's array of the Master Health Record. Element attribute `src_id` refers to the element position (index) in the related array of the new document being merged (new record).  This is modulated by the 'dest' field. When `{dest:'dest'}` is present the `dest_id` references the index of the record matched against a new entry.  When `{dest: 'src'}` is present, the `dest_id` references the index of the record contained within the same record as the `src_id`.\n\n```json\n{\n  \"match\":\n  {\n    \"allergies\" : [\n      { \"match\" : \"duplicate\", \"src_id\" : 0, \"dest_id\": 2 },\n      { \"match\" : \"new\", \"src_id\" :1 },\n      { \"match\" : \"partial\", \"percent\" : 50, \"src_id\" : 2, \"dest_id\" : 5},\n      ...\n    ],\n    \"medications\" : [...],\n    \"demographics\" : [...]\n    ...\n  }\n}\n```\n\n### Matching results JSON structures (by record type)\n\n\n\n#### Multiple facts\n\n_Applied to: All sections excluding Demographics_\n\n\nNew match entry (dest):\n\n```json\n{\n  \"match\": \"new\",\n  \"percent\": 0,\n  \"src_id\": \"1\",\n  \"dest_id\": \"2\",\n  \"dest\": \"dest\"\n}\n````\nDuplicate match entry (dest):\n\n```json\n {\n    \"match\": \"duplicate\",\n    \"percent\": \"100\",\n    \"src_id\": \"1\",\n    \"dest_id\": \"1\",\n    \"dest\": \"dest\"\n }\n````\n\nPartial match entry (dest):\n\n```json\n{\n  \"match\": \"partial\",\n  \"percent\": 50,\n  \"subelements\": {\n    \"reaction\": [{\n      \"match\": \"new\",\n      \"percent\": 0,\n      \"src_id\": \"0\",\n      \"dest_id\": \"0\",\n      \"dest\": \"dest\"\n    }]\n  },\n  \"diff\": {\n    \"date_time\": \"duplicate\",\n    \"identifiers\": \"duplicate\",\n    \"allergen\": \"duplicate\",\n    \"severity\": \"duplicate\",\n    \"status\": \"duplicate\",\n    \"reaction\": \"new\"\n  },\n  \"src_id\": \"2\",\n  \"dest_id\": \"2\",\n  \"dest\": \"dest\"\n}\n````\n\n\n#### Single facts\n\n_Applied to: Demographics_\n\n\nRecord is a duplicate:\n\n```javascript\n[ { match: 'duplicate', src_id: 0, dest_id: 0 } ]\n```\n\nRecord is a partial match:\n\n```javascript\n[ \n  { \n    match: 'diff',\n    diff: \n    { \n       name: 'duplicate',\n       dob: 'new',\n       gender: 'duplicate',\n       identifiers: 'duplicate',\n       marital_status: 'duplicate',\n       addresses: 'new',\n       phone: 'duplicate',\n       race_ethnicity: 'duplicate',\n       languages: 'duplicate',\n       religion: 'duplicate',\n       birthplace: 'duplicate',\n       guardians: 'new' \n    },\n    src_id: 0,\n    dest_id: 0 \n  } \n]\n````\n\nEdge cases for single facts:\n\nBoth objects are empty e.g. comparePartial({}, {})\n\n```javascript\n[ { match: 'duplicate' } ]\n```\n\nComparing empty object e.g. {} with non-empty (master record)\n\n```javascript\n[ { match: 'diff', diff: {} } ]\n```\n\nComparing non empty object with empty master record {}\n```javascript\n[ { match: 'new' } ]\n```\n\n## Matching Rules\n\n### Common matching rules\n\n_Date/time match_ - Hard match on dates, After initial date mismatch, fuzzy date match performed.  Will check for overlap of dates if they don't hard match.\n\n_Code match (Code System match)_ - Either names must match, or code/code system must match.  Translations are supported:  Translated objects may be matched against an object and follow the same rules.\n\n_String match_ - Case insensitive/trimmed match of string values.\n\n_String array match_ - Case insensitive/trimmed match of arrays for equality.\n\n_Boolean match_ - Simple true/false equality comparison.\n\nEach sections logic is contained in a .json file corresponding to the section name.  It is divided into primary and secondary logic.  Secondary logic only executes only if primary logic resulted in a successful match, and can bolster match percentages.   Each section contains an array of match data.\n\nEach element of match data has 3 components, a path, the location of the element, the type, or what common utility should handle it, and the percentage, which is a resulting increase if a match is made successfully.\n\nAdditionally, elements may have 'subarrays', which is used to populate sub-arrays from the match and provides corresponding diffs.  Their structure is the same as match entries.\n\nNote:  Currently, the logic is designed so a match over 50% is considered actionable.\n\n### Allergies\n\nPrimary:  Allergen Coded Match.\n\nSecondary:  Date/time.\n\n### Claims\n\nPrimary:  Payer String Match, Number String Match, and type String Array match.\n\n### Demographics\n\nAll subelements are compared.\n\n### Encounters\n\nPrimary:  Encounter Coded Match, Date/time.\n\n### Immunizations\n\nPrimary:  Product Coded Match, Date/time.\n\n### Insurance\n\nPrimary:  Plan Identifier String Match, Policy Number String Match, and Payer Name String match.\n\nNote:  Any combination of two matches will be over 50%.\n\n### Medications\n\nPrimary:  Product Coded Entry.\n\nSecondary:  Date/time.\n\n### Payers\n\nPrimary:  Policy Insurance Object.\n\n### Plan of Care\n\nPrimary:  Plan Coded Entry, Date/time.\n\n### Problems\n\nPrimary:  Problem Coded Entry.\n\nSecondary:  Date/time, Status string match, Negation Indicator boolean match.\n\n### Procedures\n\nPrimary:  Procedure Coded Entry Match.\n\nSecondary:  Date/time.\n\n### Providers\n\nPrimary:  Provider Type String Match.\n\nSecondary:  Person Object, and Name String.\n\n### Results\n\nPrimary:  Result set Coded Entry, and Result set Date/time.\n\nNote:  Date/time calculated as most recent value from results array.\n\n### Social History\n\nPrimary:  Value String entry.\n\nSecondary:  Date/time.\n\n### Vitals model\n\nPrimary:  Vital Coded entry.\n\nSecondary:  Date/time.\n\n\n## Contributing\n\nContributors are welcome. See [issues](https://github.com/amida-tech/blue-button-match/issues)\n\n## Release Notes\n\nSee release notes [here](./RELEASENOTES.md)\n\n## License\n\nLicensed under [Apache 2.0](./LICENSE)","readmeFilename":"README.md"}