@rinse-dental/open-dental 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -1
- package/dist/openDental.d.ts +5 -0
- package/dist/openDental.d.ts.map +1 -1
- package/dist/openDental.js +40 -0
- package/dist/transformerTypes/visitTypes.d.ts +78 -0
- package/dist/transformerTypes/visitTypes.d.ts.map +1 -0
- package/dist/transformerTypes/visitTypes.js +2 -0
- package/dist/transformers/index.d.ts +2 -0
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +20 -0
- package/dist/transformers/visit.d.ts +4 -0
- package/dist/transformers/visit.d.ts.map +1 -0
- package/dist/transformers/visit.js +42 -0
- package/dist/types/appointmentTypes.d.ts +4 -4
- package/dist/types/appointmentTypes.d.ts.map +1 -1
- package/package.json +4 -3
- package/release.sh +1 -1
- package/src/index.ts +1 -0
- package/src/openDental.ts +10 -0
- package/src/transformerTypes/visitTypes.ts +90 -0
- package/src/transformers/index.ts +4 -0
- package/src/transformers/visit.ts +40 -0
- package/src/types/appointmentTypes.ts +4 -4
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OpenDental = void 0;
|
|
36
|
+
exports.Transformers = exports.OpenDental = void 0;
|
|
4
37
|
var openDental_1 = require("./openDental");
|
|
5
38
|
Object.defineProperty(exports, "OpenDental", { enumerable: true, get: function () { return openDental_1.OpenDental; } });
|
|
39
|
+
exports.Transformers = __importStar(require("./transformers"));
|
package/dist/openDental.d.ts
CHANGED
|
@@ -32,6 +32,7 @@ import Allergies from "./api/allergies";
|
|
|
32
32
|
import MedicationPats from "./api/medicationPats";
|
|
33
33
|
import ProcTPs from "./api/procTPs";
|
|
34
34
|
import ProcNotes from "./api/procNotes";
|
|
35
|
+
import * as Transformers from './transformers';
|
|
35
36
|
declare class OpenDental {
|
|
36
37
|
private static httpClient;
|
|
37
38
|
/**
|
|
@@ -174,6 +175,10 @@ declare class OpenDental {
|
|
|
174
175
|
* Create a new instance of the ProcNotes API.
|
|
175
176
|
*/
|
|
176
177
|
static ProcNotes(): ProcNotes;
|
|
178
|
+
/**
|
|
179
|
+
* Access stateless Transformers (no initialization needed)
|
|
180
|
+
*/
|
|
181
|
+
static Transformers(): typeof Transformers;
|
|
177
182
|
}
|
|
178
183
|
export { OpenDental };
|
|
179
184
|
//# sourceMappingURL=openDental.d.ts.map
|
package/dist/openDental.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openDental.d.ts","sourceRoot":"","sources":["../src/openDental.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,SAAS,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"openDental.d.ts","sourceRoot":"","sources":["../src/openDental.ts"],"names":[],"mappings":"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"}
|
package/dist/openDental.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -39,6 +72,7 @@ const allergies_1 = __importDefault(require("./api/allergies"));
|
|
|
39
72
|
const medicationPats_1 = __importDefault(require("./api/medicationPats"));
|
|
40
73
|
const procTPs_1 = __importDefault(require("./api/procTPs"));
|
|
41
74
|
const procNotes_1 = __importDefault(require("./api/procNotes"));
|
|
75
|
+
const Transformers = __importStar(require("./transformers"));
|
|
42
76
|
class OpenDental {
|
|
43
77
|
static httpClient;
|
|
44
78
|
/**
|
|
@@ -358,5 +392,11 @@ class OpenDental {
|
|
|
358
392
|
}
|
|
359
393
|
return new procNotes_1.default(this.httpClient);
|
|
360
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* Access stateless Transformers (no initialization needed)
|
|
397
|
+
*/
|
|
398
|
+
static Transformers() {
|
|
399
|
+
return Transformers;
|
|
400
|
+
}
|
|
361
401
|
}
|
|
362
402
|
exports.OpenDental = OpenDental;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Timestamp } from "firebase-admin/firestore";
|
|
2
|
+
/**
|
|
3
|
+
* Represents an visit in firebase.
|
|
4
|
+
* Transformer for appointment
|
|
5
|
+
*/
|
|
6
|
+
export interface Visit {
|
|
7
|
+
serverDateTime?: string;
|
|
8
|
+
AptNum?: number;
|
|
9
|
+
docRef?: string;
|
|
10
|
+
PatNum?: number;
|
|
11
|
+
AptStatus?: AptStatus;
|
|
12
|
+
Pattern?: string;
|
|
13
|
+
Confirmed?: number;
|
|
14
|
+
confirmed?: string;
|
|
15
|
+
TimeLocked?: boolean;
|
|
16
|
+
Op?: number;
|
|
17
|
+
Note?: string;
|
|
18
|
+
ProvNum?: number;
|
|
19
|
+
provAbbr?: string;
|
|
20
|
+
ProvHyg?: number;
|
|
21
|
+
AptDateTime?: string;
|
|
22
|
+
NextAptNum?: number;
|
|
23
|
+
UnschedStatus?: number;
|
|
24
|
+
unschedStatus?: string;
|
|
25
|
+
IsNewPatient?: boolean;
|
|
26
|
+
ProcDescript?: string;
|
|
27
|
+
ClinicNum?: number;
|
|
28
|
+
IsHygiene?: boolean;
|
|
29
|
+
DateTStamp?: string;
|
|
30
|
+
DateTimeArrived?: string;
|
|
31
|
+
DateTimeSeated?: string;
|
|
32
|
+
DateTimeDismissed?: string;
|
|
33
|
+
InsPlan1?: number;
|
|
34
|
+
InsPlan2?: number;
|
|
35
|
+
DateTimeAskedToArrive?: string;
|
|
36
|
+
colorOverride?: string;
|
|
37
|
+
AppointmentTypeNum?: number;
|
|
38
|
+
eServiceLogType?: string;
|
|
39
|
+
SecDateTEntry?: string;
|
|
40
|
+
Priority?: Priority;
|
|
41
|
+
PatternSecondary?: string;
|
|
42
|
+
ItemOrderPlanned?: number;
|
|
43
|
+
appendix: Appendix;
|
|
44
|
+
}
|
|
45
|
+
export type Appendix = {
|
|
46
|
+
duration?: number;
|
|
47
|
+
status?: string;
|
|
48
|
+
ProvNum?: number;
|
|
49
|
+
ProviderDocRef?: string;
|
|
50
|
+
VisitTypeDocRef?: string;
|
|
51
|
+
OpDocRef?: string;
|
|
52
|
+
date?: string;
|
|
53
|
+
dateTime?: string;
|
|
54
|
+
firestoreTimestamp?: Timestamp;
|
|
55
|
+
date_formats?: Date_Formats;
|
|
56
|
+
};
|
|
57
|
+
export type Date_Formats = {
|
|
58
|
+
date_display?: string;
|
|
59
|
+
month_MMM?: string;
|
|
60
|
+
month_MMMM?: string;
|
|
61
|
+
day_ddd?: string;
|
|
62
|
+
day_dddd?: string;
|
|
63
|
+
year_YY?: string;
|
|
64
|
+
year_YYYY?: string;
|
|
65
|
+
time?: string;
|
|
66
|
+
timezone?: string;
|
|
67
|
+
duration_desc?: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Appointment status options.
|
|
71
|
+
* @see https://www.opendental.com/site/apiappointments.html
|
|
72
|
+
*/
|
|
73
|
+
export type AptStatus = "Scheduled" | "Complete" | "UnschedList" | "ASAP" | "Broken" | "Planned" | "PtNote" | "PtNoteCompleted";
|
|
74
|
+
/**
|
|
75
|
+
* Appointment priority options.
|
|
76
|
+
*/
|
|
77
|
+
export type Priority = "Normal" | "ASAP";
|
|
78
|
+
//# sourceMappingURL=visitTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitTypes.d.ts","sourceRoot":"","sources":["../../src/transformerTypes/visitTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./visit"), exports);
|
|
18
|
+
// Add more as you grow:
|
|
19
|
+
// export * from './patientToProfile';
|
|
20
|
+
// export * from './claimToSummary';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visit.d.ts","sourceRoot":"","sources":["../../src/transformers/visit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAIvD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,KAAK,CAkC1D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.appointmentToVisit = appointmentToVisit;
|
|
7
|
+
const moment_timezone_1 = __importDefault(require("moment-timezone"));
|
|
8
|
+
const firestore_1 = require("firebase-admin/firestore");
|
|
9
|
+
function appointmentToVisit(apt) {
|
|
10
|
+
const moment_aptDateTime = moment_timezone_1.default.tz(apt.AptDateTime, 'YYYY-MM-DD HH:mm:ss', 'America/Los_Angeles');
|
|
11
|
+
const duration = (apt.Pattern?.length || 0) * 5;
|
|
12
|
+
const location = 'NF6YVFAXyRVXGi5nItqV';
|
|
13
|
+
return {
|
|
14
|
+
docRef: `/patients/${apt.PatNum}/patientVisits/${apt.AptNum}`,
|
|
15
|
+
...apt,
|
|
16
|
+
TimeLocked: apt.TimeLocked === 'true',
|
|
17
|
+
IsHygiene: apt.IsHygiene == 'true',
|
|
18
|
+
IsNewPatient: apt.IsNewPatient == 'true',
|
|
19
|
+
appendix: {
|
|
20
|
+
duration: duration,
|
|
21
|
+
ProvNum: apt.IsHygiene ? apt.ProvHyg : apt.ProvNum,
|
|
22
|
+
ProviderDocRef: `/providers/${apt.ProvNum}`,
|
|
23
|
+
VisitTypeDocRef: `/lookups/lookup_definitions/lookup_visitType/${apt.AppointmentTypeNum}`,
|
|
24
|
+
OpDocRef: `/locations/${location}/locationOperatories/${apt.Op}`,
|
|
25
|
+
date: moment_aptDateTime.format('YYYY-MM-DD'),
|
|
26
|
+
dateTime: moment_aptDateTime.format(),
|
|
27
|
+
firestoreTimestamp: firestore_1.Timestamp.fromDate(moment_aptDateTime.toDate()),
|
|
28
|
+
date_formats: {
|
|
29
|
+
date_display: moment_aptDateTime.format('MMM D, YYYY'),
|
|
30
|
+
month_MMM: moment_aptDateTime.format('MMM'),
|
|
31
|
+
month_MMMM: moment_aptDateTime.format('MMMM'),
|
|
32
|
+
day_ddd: moment_aptDateTime.format('ddd'),
|
|
33
|
+
day_dddd: moment_aptDateTime.format('dddd'),
|
|
34
|
+
year_YY: moment_aptDateTime.format('YY'),
|
|
35
|
+
year_YYYY: moment_aptDateTime.format('YYYY'),
|
|
36
|
+
time: moment_aptDateTime.format('h:mm A'),
|
|
37
|
+
timezone: moment_aptDateTime.tz(),
|
|
38
|
+
duration_desc: `${duration} min`,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export interface Appointment {
|
|
7
7
|
serverDateTime?: string;
|
|
8
|
-
AptNum
|
|
9
|
-
PatNum
|
|
10
|
-
AptStatus
|
|
8
|
+
AptNum: number;
|
|
9
|
+
PatNum: number;
|
|
10
|
+
AptStatus: AptStatus;
|
|
11
11
|
Pattern?: string;
|
|
12
12
|
Confirmed?: number;
|
|
13
13
|
confirmed?: string;
|
|
@@ -17,7 +17,7 @@ export interface Appointment {
|
|
|
17
17
|
ProvNum?: number;
|
|
18
18
|
provAbbr?: string;
|
|
19
19
|
ProvHyg?: number;
|
|
20
|
-
AptDateTime
|
|
20
|
+
AptDateTime: string;
|
|
21
21
|
NextAptNum?: number;
|
|
22
22
|
UnschedStatus?: number;
|
|
23
23
|
unschedStatus?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appointmentTypes.d.ts","sourceRoot":"","sources":["../../src/types/appointmentTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,
|
|
1
|
+
{"version":3,"file":"appointmentTypes.d.ts","sourceRoot":"","sources":["../../src/types/appointmentTypes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rinse-dental/open-dental",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "A TypeScript library for easily accessing Open Dental APIs.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"url": "git+https://github.com/getrinsed/open-dental.git"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"axios": "^1.
|
|
19
|
-
"moment-timezone": "^0.6.0"
|
|
18
|
+
"axios": "^1.11.0",
|
|
19
|
+
"moment-timezone": "^0.6.0",
|
|
20
|
+
"firebase-admin": "^13.4.0"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"@types/jest": "^29.5.14",
|
package/release.sh
CHANGED
|
@@ -45,4 +45,4 @@ gh release create "$NEW_TAG" --title "Release $NEW_TAG" --notes "$COMMIT_MSG"
|
|
|
45
45
|
#example ./release.sh "Some commit message" major
|
|
46
46
|
#npm token: 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
|
|
47
47
|
|
|
48
|
-
#./release.sh "
|
|
48
|
+
#./release.sh "Updated ProcedureLog to support 25.2.21, added ProcTP, added remainder of ChartModules" minor
|
package/src/index.ts
CHANGED
package/src/openDental.ts
CHANGED
|
@@ -34,6 +34,9 @@ import MedicationPats from "./api/medicationPats";
|
|
|
34
34
|
import ProcTPs from "./api/procTPs";
|
|
35
35
|
import ProcNotes from "./api/procNotes";
|
|
36
36
|
|
|
37
|
+
|
|
38
|
+
import * as Transformers from './transformers';
|
|
39
|
+
|
|
37
40
|
class OpenDental {
|
|
38
41
|
private static httpClient: HttpClient;
|
|
39
42
|
|
|
@@ -392,6 +395,13 @@ class OpenDental {
|
|
|
392
395
|
return new ProcNotes(this.httpClient);
|
|
393
396
|
}
|
|
394
397
|
|
|
398
|
+
/**
|
|
399
|
+
* Access stateless Transformers (no initialization needed)
|
|
400
|
+
*/
|
|
401
|
+
public static Transformers() {
|
|
402
|
+
return Transformers;
|
|
403
|
+
}
|
|
404
|
+
|
|
395
405
|
}
|
|
396
406
|
|
|
397
407
|
export { OpenDental };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Timestamp } from "firebase-admin/firestore";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents an visit in firebase.
|
|
5
|
+
* Transformer for appointment
|
|
6
|
+
*/
|
|
7
|
+
export interface Visit {
|
|
8
|
+
serverDateTime?: string; // Server timestamp of the appointment; returned by some endpoints
|
|
9
|
+
AptNum?: number; // Unique identifier for the appointment
|
|
10
|
+
docRef?: string; // docRef of this visit.
|
|
11
|
+
PatNum?: number; // Unique identifier for the patient
|
|
12
|
+
AptStatus?: AptStatus; // Status of the appointment (Scheduled, Complete, etc.)
|
|
13
|
+
Pattern?: string; // Time pattern in 5-minute increments, e.g., "/XX/" for 20 minutes
|
|
14
|
+
Confirmed?: number; // Confirmation status code
|
|
15
|
+
confirmed?: string; // Description of the confirmation status
|
|
16
|
+
TimeLocked?: boolean; // Indicates if the appointment time is locked
|
|
17
|
+
Op?: number; // Operatory number
|
|
18
|
+
Note?: string; // Notes for the appointment
|
|
19
|
+
ProvNum?: number; // Provider number associated with the appointment
|
|
20
|
+
provAbbr?: string; // Abbreviation of the provider's name
|
|
21
|
+
ProvHyg?: number; // Hygienist provider number
|
|
22
|
+
AptDateTime?: string; // Appointment start time in "yyyy-MM-dd HH:mm:ss" format
|
|
23
|
+
NextAptNum?: number; // Appointment number of the next scheduled appointment
|
|
24
|
+
UnschedStatus?: number; // Status of an unscheduled appointment
|
|
25
|
+
unschedStatus?: string; // Description of the unscheduled status
|
|
26
|
+
IsNewPatient?: boolean; // Indicates if the appointment is for a new patient
|
|
27
|
+
ProcDescript?: string; // Description of procedures linked to the appointment
|
|
28
|
+
ClinicNum?: number; // Clinic number, optional if not using clinics
|
|
29
|
+
IsHygiene?: boolean; // Indicates if the appointment is for hygiene
|
|
30
|
+
DateTStamp?: string; // Timestamp of the last update in "yyyy-MM-dd HH:mm:ss" format
|
|
31
|
+
DateTimeArrived?: string; // Time the patient arrived, if available
|
|
32
|
+
DateTimeSeated?: string; // Time the patient was seated, if available
|
|
33
|
+
DateTimeDismissed?: string; // Time the patient was dismissed, if available
|
|
34
|
+
InsPlan1?: number; // Primary insurance plan number
|
|
35
|
+
InsPlan2?: number; // Secondary insurance plan number
|
|
36
|
+
DateTimeAskedToArrive?: string; // Requested arrival time in "yyyy-MM-dd HH:mm:ss" format
|
|
37
|
+
colorOverride?: string; // Custom color in "R,G,B" format
|
|
38
|
+
AppointmentTypeNum?: number; // Appointment type number
|
|
39
|
+
eServiceLogType?: string; //Used only for GET WebSched; eServiceLogType field as either "Recall", "NewPat", "ExistingPat", or "ASAP"
|
|
40
|
+
SecDateTEntry?: string; // Secondary date entry timestamp
|
|
41
|
+
Priority?: Priority; // Priority of the appointment (Normal, ASAP)
|
|
42
|
+
PatternSecondary?: string; // Secondary time pattern in 5-minute increments
|
|
43
|
+
ItemOrderPlanned?: number; // Order of the item in planned appointments
|
|
44
|
+
appendix: Appendix; // maps to the Appendix type
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type Appendix = {
|
|
48
|
+
duration?: number; // pattern * 5
|
|
49
|
+
status?: string; //
|
|
50
|
+
ProvNum?: number; // ProvNum or ProvHyg depending on IsHygiene
|
|
51
|
+
ProviderDocRef?: string; //
|
|
52
|
+
VisitTypeDocRef?: string; //
|
|
53
|
+
OpDocRef?: string; //
|
|
54
|
+
date?: string; //
|
|
55
|
+
dateTime?: string; //
|
|
56
|
+
firestoreTimestamp?: Timestamp; // admin.firestore.Timestamp.fromDate(moment_aptDateTime.toDate()),
|
|
57
|
+
date_formats?: Date_Formats; //
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type Date_Formats = {
|
|
61
|
+
date_display?: string; //
|
|
62
|
+
month_MMM?: string; //
|
|
63
|
+
month_MMMM?: string;
|
|
64
|
+
day_ddd?: string; //
|
|
65
|
+
day_dddd?: string; //
|
|
66
|
+
year_YY?: string; //
|
|
67
|
+
year_YYYY?: string; //
|
|
68
|
+
time?: string; //
|
|
69
|
+
timezone?: string; //
|
|
70
|
+
duration_desc?: string; //
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Appointment status options.
|
|
75
|
+
* @see https://www.opendental.com/site/apiappointments.html
|
|
76
|
+
*/
|
|
77
|
+
export type AptStatus =
|
|
78
|
+
| "Scheduled"
|
|
79
|
+
| "Complete"
|
|
80
|
+
| "UnschedList"
|
|
81
|
+
| "ASAP"
|
|
82
|
+
| "Broken"
|
|
83
|
+
| "Planned"
|
|
84
|
+
| "PtNote"
|
|
85
|
+
| "PtNoteCompleted";
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Appointment priority options.
|
|
89
|
+
*/
|
|
90
|
+
export type Priority = "Normal" | "ASAP";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Appointment } from '../types/appointmentTypes';
|
|
2
|
+
import { Visit } from '../transformerTypes/visitTypes';
|
|
3
|
+
import moment from 'moment-timezone';
|
|
4
|
+
import { Timestamp } from 'firebase-admin/firestore';
|
|
5
|
+
|
|
6
|
+
export function appointmentToVisit(apt: Appointment): Visit {
|
|
7
|
+
const moment_aptDateTime = moment.tz(apt.AptDateTime, 'YYYY-MM-DD HH:mm:ss', 'America/Los_Angeles');
|
|
8
|
+
const duration = (apt.Pattern?.length || 0) * 5;
|
|
9
|
+
const location = 'NF6YVFAXyRVXGi5nItqV';
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
docRef: `/patients/${apt.PatNum}/patientVisits/${apt.AptNum}`,
|
|
13
|
+
...apt,
|
|
14
|
+
TimeLocked: apt.TimeLocked === 'true',
|
|
15
|
+
IsHygiene: apt.IsHygiene == 'true',
|
|
16
|
+
IsNewPatient: apt.IsNewPatient == 'true',
|
|
17
|
+
appendix: {
|
|
18
|
+
duration: duration,
|
|
19
|
+
ProvNum: apt.IsHygiene ? apt.ProvHyg : apt.ProvNum,
|
|
20
|
+
ProviderDocRef: `/providers/${apt.ProvNum}`,
|
|
21
|
+
VisitTypeDocRef: `/lookups/lookup_definitions/lookup_visitType/${apt.AppointmentTypeNum}`,
|
|
22
|
+
OpDocRef: `/locations/${location}/locationOperatories/${apt.Op}`,
|
|
23
|
+
date: moment_aptDateTime.format('YYYY-MM-DD'),
|
|
24
|
+
dateTime: moment_aptDateTime.format(),
|
|
25
|
+
firestoreTimestamp: Timestamp.fromDate(moment_aptDateTime.toDate()),
|
|
26
|
+
date_formats: {
|
|
27
|
+
date_display: moment_aptDateTime.format('MMM D, YYYY'),
|
|
28
|
+
month_MMM: moment_aptDateTime.format('MMM'),
|
|
29
|
+
month_MMMM: moment_aptDateTime.format('MMMM'),
|
|
30
|
+
day_ddd: moment_aptDateTime.format('ddd'),
|
|
31
|
+
day_dddd: moment_aptDateTime.format('dddd'),
|
|
32
|
+
year_YY: moment_aptDateTime.format('YY'),
|
|
33
|
+
year_YYYY: moment_aptDateTime.format('YYYY'),
|
|
34
|
+
time: moment_aptDateTime.format('h:mm A'),
|
|
35
|
+
timezone: moment_aptDateTime.tz(),
|
|
36
|
+
duration_desc: `${duration} min`,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export interface Appointment {
|
|
7
7
|
serverDateTime?: string; // Server timestamp of the appointment; returned by some endpoints
|
|
8
|
-
AptNum
|
|
9
|
-
PatNum
|
|
10
|
-
AptStatus
|
|
8
|
+
AptNum: number; // Unique identifier for the appointment
|
|
9
|
+
PatNum: number; // Unique identifier for the patient
|
|
10
|
+
AptStatus: AptStatus; // Status of the appointment (Scheduled, Complete, etc.)
|
|
11
11
|
Pattern?: string; // Time pattern in 5-minute increments, e.g., "/XX/" for 20 minutes
|
|
12
12
|
Confirmed?: number; // Confirmation status code
|
|
13
13
|
confirmed?: string; // Description of the confirmation status
|
|
@@ -17,7 +17,7 @@ export interface Appointment {
|
|
|
17
17
|
ProvNum?: number; // Provider number associated with the appointment
|
|
18
18
|
provAbbr?: string; // Abbreviation of the provider's name
|
|
19
19
|
ProvHyg?: number; // Hygienist provider number
|
|
20
|
-
AptDateTime
|
|
20
|
+
AptDateTime: string; // Appointment start time in "yyyy-MM-dd HH:mm:ss" format
|
|
21
21
|
NextAptNum?: number; // Appointment number of the next scheduled appointment
|
|
22
22
|
UnschedStatus?: number; // Status of an unscheduled appointment
|
|
23
23
|
unschedStatus?: string; // Description of the unscheduled status
|