Add user workspaces, dental DB scripts, server memory + code editor improvements
- cherry: orofacial/TMD PPTX presentations + 음악가 구강건강 가이드 - papa: sinus/infraoccluded PPTX, garden-monitor Arduino, MIDI files - databases: PCSP scraper, translation scripts, vision benchmark, batch JSONs - web-ui: code.js/companion.py/styles.css major updates, autostart installer - src: ollama-client, session, LLMProvider, ollama-adapter patches - .gitignore: add claude-key, SQLite WAL/SHM, __pycache__, nohup.out Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@@ -0,0 +1,67 @@
|
||||
# Maxillary Sinus Lift Procedures: An Overview of Current Techniques, Presurgical Evaluation, and Complications
|
||||
Muacevic Alexander, Adler John R
|
||||
Cureus (2023)
|
||||
PMC ID: PMC10753870
|
||||
|
||||
## Abstract
|
||||
A maxillary sinus lift procedure is indicated if a dental implant needs to be placed in the posterior maxilla with limited bone available to accommodate a dental implant. Both open and closed sinus lifting procedures are reliable approaches for increasing the bone volume needed to support proper implant positioning. However, these methods can lead to several complications. In addition to the general complications commonly linked to oral surgery, such as swelling or hematoma, the primary complication in open sinus lifting is typically the perforation of the Schneiderian membrane during osteotomy. Detailed and extensive presurgical evaluation is crucial to minimize such complications. The objective of this study was to delineate contemporary trends in sinus lift surgery, with a specific emphasis on different techniques of sinus lift procedure, anatomical and surgical factors, presurgical evaluation, bone grafting, and the practical implications of these factors in implant dentistry cases involving a deficient posterior maxilla. In conclusion, while both osteotome and lateral window techniques can assist clinicians in addressing the complexities of implant placement in a deficient posterior maxilla, bone height before implantation remains a critical factor in determining the success and longevity of implants.
|
||||
|
||||
## Full Text
|
||||
## Introduction and background
|
||||
The maxillary sinus is the largest among all the paranasal sinuses [1]. Two types of bone resorption occur when patients lose their maxillary posterior teeth. The first type is centripetal resorption, which is a natural result of the bone remodeling process following tooth loss. The second type is resorption, caused by the pneumatization of the sinus cavity towards the alveolar crest [2]. Both types of resorption often lead to a reduced amount of bone available for placement of dental implants, necessitating a regenerative procedure known as a maxillary sinus lifting procedure. Sinus lifts are regarded as a safe treatment option with a lower risk of complications [3,4]. The primary goal of this intervention is to create enough bone height and width to facilitate the proper placement of dental implants. This goal can be achieved using either a one-stage or two-stage technique. The one-stage technique inserts dental implants simultaneously with the sinus augmentation procedure. With the two-stage technique, bone augmentation is performed during the initial surgical procedure, and the dental implants are placed later once the necessary bone volume has been established [5].
|
||||
The traditional sinus lift procedure, initially explained by Tatum H [3,6] in the 1970s, involved a combination of incisions. This combination included a crystal incision along with mesial and distal vertical incisions, allowing for the elevation of a buccal flap to expose the outer bone wall of the sinus. Subsequently, a trapdoor osteotomy (window) was made in the lateral bone wall, providing access to the Schneiderian membrane and the sinus cavity. Schneiderian membrane is a membrane that forms the lining of the inner aspect of the maxillary sinus. The membrane was then meticulously dissected and lifted in an apical direction, with particular care taken to preserve its integrity. This displacement of the membrane created space for the graft material. Bone replacement grafts in maxillary sinus lift procedures encompass a variety of materials. These include autologous bone, which can be sourced from the mandibular ramus, chin, iliac crest, or other intraoral locations, as well as bone substitutes, synthetic biomaterials, or combinations of these substances [7,8].
|
||||
In cases where patients have sufficient remaining bone height, it is possible to augment the sinus floor using a less-invasive method known as the trans-alveolar approach, which involves the use of the osteotome technique. This technique, first employed by Summers RB [7] in 1994, allows sinus floor augmentation without the need for extensive surgery. However, complications are possible during maxillary sinus lift surgery. The most frequently encountered intraoperative complication in maxillary sinus lift procedures is the perforation of the sinus membrane. Other potential complications include postoperative infection, sinusitis, graft exposure, graft loss, edema (swelling), seroma formation (accumulation of fluid), bleeding, and membrane exposure [9-12]. The objective of this study is to review the maxillary sinus lift procedure, encompassing preoperative assessment, surgical techniques, bone grafting materials, and possible complications.
|
||||
## Review
|
||||
Anatomy
|
||||
The maxillary sinus holds approximately 12-15 mL of air in adults [13]. It has a pyramidal shape, with its base near the nasal cavity, the upper part serving as the orbital floor, and the tip toward the zygomatic bone [14]. An oval or slit-shaped drainage opening, known as the ostium, functions as an overflow opening and is positioned in the upper part of the inner wall [14,15]. The space between the semilunar hiatus and the nasal floor can range from 18 to 35 mm, with an average of 25.6 mm [16]. The position of the ostium minimizes the chances that it will be blocked during augmentation procedures [17]. The base of the maxillary sinus extends from the premolar or canine region anteriorly and to the maxillary tuberosity posteriorly, often reaching its lowest point near the first molar area [18]. In dentate adults, the maxillary sinus floor is the thickest of its walls and lies approximately at the same level as the nasal floor. However, in patients who have lost their teeth (edentulous), it is typically situated about 1 cm below the nasal floor. Septa within the sinus is composed of cortical bone and can be found both horizontally and vertically within the sinus floor [19,20]. Some studies have observed septa in approximately 25%-31.7% of maxillary sinuses [21,22], and these septa can range from 2.5 to 12.7 mm in length and be in various locations within the maxillary sinus [11]. Notably, there tend to be more septa in edentulous or atrophic (reduced in size) ridges than in partially edentulous or nonatrophic arches [19,21].
|
||||
Blood supply and innervation
|
||||
The primary branches of the maxillary artery, which supply blood to the bony walls and membrane of the sinus, include the posterior superior alveolar artery, inferior orbital artery, greater palatine artery, and sphenopalatine artery. It is essential to note that the locations of the inferior orbital artery and the posterior superior alveolar artery are crucial considerations in surgical planning, as any damage to these arteries can result in bleeding complications [23,24].
|
||||
These two arteries eventually join together, forming a dual arterial arcade that encircles the maxillary sinus [25]. This connection can occur in either an extraosseous manner, typically located about 23-26 mm away from the alveolar ridge, or an endosseous fashion, positioned approximately 16.4-19.6 mm from the alveolar margin [24]. It is noteworthy that the dental branch of the posterior superior alveolar artery consistently exhibits an endosseous connection with the inferior orbital artery in all dissected anatomical cases; however, this connection is visible on radiographs in only 50% of cases [25-27].
|
||||
The innervation of the maxillary sinus is outlined in Table 1. It represents a distinct connection between the venous system of the maxillary sinus and the cavernous sinus, which is significant because it can potentially serve as a pathway for infections spreading from the sinus to the brain [28-30]. Table 1
|
||||
## The nerve supply to the maxillary sinus.
|
||||
PSA: Posterior superior alveolar; MSA: Middle superior alveolar; ASA: Anterior superior alveolar; IO: Infra orbital; GP: Greater palatine.
|
||||
Adapted from [28-30]NerveArea of supplyPSA + MSA nervesPosterior sinus wallASA nerveAnterior sinus wallIO nerveThe superior wall of the sinus and part of the medial wallGP nerveInferior wall of the sinus and ostium
|
||||
Presurgical evaluation
|
||||
The presurgical evaluation is preliminarily done through CT or cone-beam computed tomography (CBCT) scans. This evaluation determines essential parameters such as membrane thickness, presence of sinus septa, residual bone height, and presence of teeth. The elevation of the maxillary sinus floor carries a risk of jeopardizing the sinus physiology, and a careful and thorough CBCT evaluation before the procedure can reduce the chances of intra-operative and post-operative complications [31,32]. The maxillary sinus is considered healthy when the mucous composition is normal, mucociliary clearance is efficient, and the sinus ostium is patent. These criteria are significant because a healthy maxillary sinus is less likely to develop postsurgical complications, even in the event of a small procedural error, such as a minimal perforation [33].
|
||||
Risk of perforation
|
||||
The risk of perforation can be associated with irregularity in the membrane thickness, sinus septa, the angle between the buccal and palatal wall, and existing tooth implants or tooth roots adjacent to the sinus [34].
|
||||
The Schneiderian membrane
|
||||
The Schneiderian membrane is an important parameter during the presurgical analysis [35,36]. Membrane thickness of up to 2 mm is considered physiological and favorable; however, thickness exceeding 5 mm is associated with sinus ostium obstruction. Recent CBCT studies indicate that 1 mm is a physiological value and 4 mm is pathological [37-40].
|
||||
Sinus septa
|
||||
In approximately 38% of all cases, sinus septa (or Underwood's septa) are found inside the maxillary sinus. Depending on their shape, position, and development, they may threaten membrane integrity during sinus floor elevation, and the presence of these anatomical variations can enhance the risk of perforation [17,38,41]. The development of Underwood's septa should be considered in judging the complexity of sinus floor elevation during surgery. If the sinus septum runs transversely, surgery is straightforward, but if it is longitudinal or incomplete, the procedure may become more difficult during membrane elevation [42].
|
||||
Alveolar-antral artery
|
||||
An intraosseous anastomosis, the alveolar-antral artery, is always present between the posterior superior alveolar artery and the infraorbital artery. However, an extraosseous anastomosis exists in only 44% of cases. Hemorrhage of the alveolar-antral artery is a common complication in sinus lifting procedures. To avoid this, a posterior approach to the bone antrostomy has been suggested. Planning should include a careful evaluation of CBCT to ascertain the course of the artery. Another important consideration is the artery's diameter. If the diameter is less than 1 mm, or if the artery cannot be detected radiographically, the likelihood of severe complications during surgery is minimal. Conversely, if the diameter is 2-3 mm or greater, the risks of hemorrhage and the need to ligate the artery increase [34]. Both the diameter and course of the artery are evaluated through CBCT, as shown in Figure 1 [43].Figure 1
|
||||
## CBCT showing both the diameter and course of the alveolar-antral artery.
|
||||
CBCT: Cone-beam computed tomography.
|
||||
Source: [43]
|
||||
Presence of teeth
|
||||
The resorption of the alveolar ridge and the maxillary sinus pneumatization are both profoundly influenced by the loss of posterior teeth [44]. When a close relation between the sinus membrane and tooth roots has been detected, especially in the case of a single posterior missing tooth, the perforation risk increases [45]. However, the probability of perforation decreases when two adjacent teeth are missing. This decreased probability could be due to the presence of sinus pneumatization in a small area with an irregular sinus floor shape. Figure 2 shows the relationship between the extraction of teeth and pneumatization of the maxillary sinus [46].Figure 2
|
||||
## A panoramic image showing reference lines drawn and perpendicular distances measured from the crest of the bone to the maxillary sinus floor.
|
||||
Source: [46].
|
||||
Residual alveolar ridge height
|
||||
Residual alveolar ridge height has been suggested to significantly influence membrane thickness [47] and the success of implant therapy over time [9]. Alveolar ridge height also plays a major role in implant survival rates [48]. According to some studies [49,50], a pre-implant bone height of less than 5 mm is associated with a decreased survival rate. These findings indicate that a higher success rate could be achieved with greater alveolar bone height.
|
||||
General considerations
|
||||
Generally, sinus lifting is indicated with a residual bone height of 10 mm or less (including leaving a space of 1 to 2 mm of bone between the implant apex and the sinus floor level) [48]. The two basic methods for the sinus lifting procedure are the trans-alveolar (crestal osteotome) and the lateral window [51]. If more than 5 mm of bone height is present, the crestal osteotome is the treatment of choice [52]. However, if the ridge height is severely reduced, the use of a lateral window is indicated. This technique can aid in achieving a height of up to 9 mm, which is enough to compensate for the bone shortage [48]. Factors affecting the prognosis of the maxillary sinus lifting procedure are demonstrated in Table 2.Table 2
|
||||
## A summary of factors affecting the prognosis of maxillary sinus lifting procedures.
|
||||
Source: [34]PrognosisThe Schneiderian membraneSinus septaAlveolar-antral arteryPresence of teeth (from second premolar to second molar)Residual alveolar ridge height Most favorable1-2 mmAbsence of septaDiameter less than 1 mm or not detectable radiographicallyTotally missing teethHigher than 4 mmNormal0.8-1.49 mm, 2.01-2.99 mm.Presence of one complete and transverse sinus septum1-2 mmTwo adjacent missing teeth2-4 mmLeast favorableLess than 0.80 or more than 3 mmPresence of one or more incomplete or longitudinal sinus septaMore than 2 mmSingle missing toothLess than 2 mm
|
||||
Surgical techniques
|
||||
The maxillary sinus lift procedure has gained widespread acceptance to reduce postoperative complications in cases of limited bone height in the posterior maxillary alveolar ridge [48]. This procedure is typically advised in cases with bone height in the posterior maxilla of 10 mm or less [53].
|
||||
Tatum H [54] introduced the initial lateral window procedure in 1975. This technique involves surgically creating an opening in the lateral wall of the sinus and then gently lifting the Schneiderian membrane to facilitate placing the implant(s) of suitable length. The use of the lateral approach is particularly valuable in cases of substantial bone deficits because it allows an increase in vertical bone height by more than 9 mm [48]. The osteotomy can be executed by utilizing either a high-speed handpiece or precise piezoelectric instruments. Using a piezoelectric tip to prepare the window greatly reduces the likelihood of membrane perforation and results in an overall safer procedure [54-56].
|
||||
In 1994, Summers RB [7] was the first to employ the osteotome approach. This technique involves a transalveolar elevation of the maxillary sinus floor. This approach offers several advantages, including efficient surgical procedures, reduced surgical duration, fewer complications, lower postoperative discomfort, and increased patient satisfaction. Furthermore, the osteotome approach typically increases vertical bone height from 3 to 9 mm [52,57,58].
|
||||
To optimize the results of lifting the maxillary sinus, various minimally invasive strategies have been developed to provide an increased level of patient satisfaction [48]. The antral membrane balloon elevation is a minimally invasive approach designed to gradually lift the Schneiderian membrane while ensuring its preservation. The membrane is carefully separated by applying gentle and sustained pressure while inflating a latex balloon. This method is considered relatively safer, with minimal postoperative bleeding, pain, or discomfort [59,60]. Large-scale longitudinal studies are required to establish the procedure's clinical effectiveness and long-term outcomes [61].
|
||||
Recently, a new bioactive kinetic screw bone implant model efficiently accomplishes both autogenous grafting and sinus augmentation while also securing the implant in a single procedure. When the vertical bone height in the planned implant site is less than 4 mm, an additional surgical step is undertaken to harvest bone and enhance its availability [62-66]. Experimental studies conducted on synthetic maxillary bone and sinus have successfully demonstrated the feasibility and simplicity of this innovative technique. However, more studies are needed to further evaluate this technique [67].
|
||||
The selection of the appropriate surgical technique for sinus lift procedures primarily depends on the height of the existing pre-implant bone. The transcrestal approach tends to be preferred when the residual bone height is greater than 5 mm. In cases where the residual bone height is 5 mm or less, the lateral window approach is considered more suitable [7,58,68-70].
|
||||
Bone grafting materials
|
||||
Bone grafts can be used to promote bone formation and maxillary sinus augmentation can be accomplished through the use of autografts, allografts, xenografts, alloplastic material, and growth factors [71]. Autogenous grafts obtained from the same individual are considered the gold standard because of their osteogenic capacity and osteoconductive and osteoinductive properties. Autogenous grafts also heal quickly and have strong resistance to infections. However, the increased morbidity and unpredictable reabsorption associated with autografts have led to the development and use of synthetic substitutes. Allogenic grafts, obtained from another individual in the same species, have only osteoconductive and osteoinductive capabilities. Xenografts, obtained from different species, possess only osteoconductive capability. Alloplastic grafts, whether natural or synthetic, are solely osteoconductive biomaterials [51,72]. Adding xenografts to autogenous grafts improves volumetric stability in the sinus augmentation procedure [73]. All graft types can be prepared in different forms, such as large blocks or streaky gels. Some authors have suggested performing sinus lift procedures without grafting materials by utilizing coagulated blood as a scaffold to form new bone. However, this technique was not evaluated alongside appropriate control procedures, and the results were not reproducible [4]. A different approach was introduced in managing cases using platelet-rich plasma or plasma rich in growth factors, with or without grafting biomaterials. The preparation of platelet-rich plasma involves the use of citrate in blood samples to prevent coagulation and maintain a liquid form. To prepare the gel form, thrombin and/or calcium chloride are added to induce fibrin polymerization [74]. Platelet-rich fibrin is considered a second-generation platelet concentrate, offering additional advantages such as enhanced healing capabilities, low cost, and ease of handling. Platelet-rich fibrin can improve new bone formation, and significant results can be obtained after a sinus lift procedure [75]. The use of platelet-rich fibrin can also improve implant stability and the osseointegration process [76]. Platelet-rich fibrin is currently a trend in the management of sinus lift procedures and is considered superior to first-generation concentrates [77].
|
||||
Complications of maxillary sinus lift procedure
|
||||
Just as with any other surgical procedure, a sinus lift is associated with various complications, including intraoperative complications, acute postoperative complications, and chronic postoperative complications [78].
|
||||
Intraoperative Complications
|
||||
Common complications that can occur during maxillary sinus graft surgery are the perforation of the Schneiderian membrane, penetration into the sinus or nasal cavity, bleeding, damage to the adjacent teeth, bone fracture, perforation of the alveolar bone, inadequate initial implant stability, incorrect placement or alignment of the implant, blockage of the opening to the maxillary sinus, and accidental swallowing of surgical instruments [78].
|
||||
Tearing of the Schneiderian membrane: Tearing of the Schneiderian membrane is the most frequently encountered complication during maxillary sinus graft procedures. The incidence of this complication falls within the range of 20%-44% when the lateral window approach is used [51]. Ardekian L et al. [79] reported that perforation of the sinus membrane happened in 85% of cases with a residual ridge measuring 3 mm, whereas in cases with a 6-mm residual ridge, membrane perforation only occurred in 25% of cases. Minor perforations may not necessitate treatment, but in the event of a significant perforation, the procedure should either be halted, or a collagen membrane should be applied to repair the perforation. If the procedure is stopped, a subsequent attempt should not be made for another 4-6 months [10].
|
||||
Bleeding: The maxillary sinus region contains a network of blood vessels, with the primary vessel being the maxillary artery. This artery gives rise to multiple branches, including the intraorbital artery, the anterior superior palatine artery, and the posterior superior alveolar artery, that supply blood to the sinus cavity and the adjacent tissues and structures. Numerous connections (anastomoses) are typically observed between the posterior superior alveolar artery and the infraorbital artery within the lateral bony wall of the sinus. These connections play a crucial role in ensuring adequate blood circulation in this region [80]. Bleeding can occur if arteries are damaged during the preparation of the lateral window. To mitigate this risk, it is advisable to identify the location of the artery prior to surgery using CBCT [2]. To address a severed vessel, various methods have been suggested, including applying strong pressure, directly tying off the vessel, introducing particulate bone graft into the arterial canal, using bone wax, smoothing the area with burs, and employing electrocautery. Additionally, having the patient sit upright can help reduce blood flow by 38%, aiding in the control of bleeding [28].
|
||||
Acute Postoperative Complications
|
||||
Immediate postoperative complications include discomfort, inflammation, swelling, infection affecting both the surgical area and the sinus, sinusitis, bone loss, bleeding, bruising around the mouth and nose, and hematoma (particularly hemosinus). Other potential issues include the presence of emphysema, wound opening, graft loss, fixture displacement or loss, the formation of an oroantral fistula, benign paroxysmal positional vertigo, and transient or permanent numbness in the palate [78].
|
||||
Chronic Postoperative Complications
|
||||
While implant periapical lesions are infrequent in the maxilla, they can arise in clinical situations in which excessive heat is generated during the drilling process. When the bone is assessed as hard, a longer time gap (at least one minute) between drilling stages is advised. Additionally, utilizing chilled saline instead of the standard room-temperature saline solution can be beneficial [78].
|
||||
## Conclusions
|
||||
In conclusion, maxillary sinus augmentation is an effective preprosthetic method for enhancing the edentulous posterior maxilla. A thorough presurgical evaluation of sinus anatomy significantly lowers the likelihood of complications. Using growth factors and stem cells is a promising technique to improve graft maturation time, although additional clinical research is required to fully assess their advantages.
|
||||
@@ -0,0 +1,113 @@
|
||||
# Sinus Savvy: Exploring the Current Techniques of Maxillary Sinus Augmentation
|
||||
Muacevic Alexander, Adler John R
|
||||
Cureus (2024)
|
||||
PMC ID: PMC11230615
|
||||
|
||||
## Abstract
|
||||
Sinus ridge augmentation is a surgical procedure aimed at increasing the volume of bone in the posterior maxilla to permit successful dental implant placement. The current review article presents an overview of various techniques used for sinus ridge augmentation, including the lateral window technique, crestal approach, transalveolar technique, and piezoelectric osteotomy. The article examines the advantages and limitations of each technique, such as invasiveness, surgical difficulty, and the requirement for additional procedures. Additionally, the article discusses the factors that influence the success of the procedure, including patient age, residual bone height, and the kind of bone graft substance used. The review also emphasizes the importance of proper case selection, surgical planning, and postoperative care to ensure optimal outcomes. Overall, the article provides valuable insights into the current techniques used for sinus ridge augmentation, highlighting the need for further research to improve patient outcomes and the success of placing dental implants over the long run.
|
||||
|
||||
## Full Text
|
||||
## Introduction and background
|
||||
The maxillary sinuses are air-filled cavities located behind the cheeks and above the upper teeth. When teeth are lost, especially in the posterior maxilla, the bone that once supported them tends to shrink over time, leaving inadequate bone for stable implant anchorage. This limitation can compromise the success of dental implant treatment in these areas. Maxillary sinus augmentation addresses this issue by effectively increasing the bone volume and density in the posterior maxilla, creating a more favorable environment for the placement of dental implants. By elevating the sinus membrane and adding bone graft material beneath it, this procedure augments the bone height and width in the area, providing a stable foundation for dental implant placement.
|
||||
The augmentation graft of the maxillary sinus was a crucial component of implant-directed maxillary reconstruction for over three decades [1]. Maxillary sinus augmentation, also known as sinus lift surgery, has evolved significantly over the years, from its early inception as a bone augmentation procedure pioneered by Tatum in the 1970s to the refined and sophisticated techniques utilized today. This procedure plays a pivotal role in creating a stable foundation for dental implants in the posterior maxilla, where bone quality and quantity are often compromised.
|
||||
This article serves as a comprehensive exploration of the various maxillary sinus augmentation techniques currently employed in clinical practice. By delving into the intricacies of these techniques, we aim to provide a nuanced understanding of their principles, indications, advantages, and potential complications. Furthermore, we will highlight recent advancements and emerging trends that are reshaping the landscape of maxillary sinus augmentation, paving the way for improved outcomes and patient satisfaction. Through this exploration, we will elucidate the rationale behind each technique, ranging from lateral window and crestal approaches to innovative minimally invasive methods such as hydraulic sinus condensing and balloon sinus elevation.
|
||||
The goal of the present article is to give an outline of the fundamental principles of maxillary sinus reconstruction, comprising the physiology and anatomy of the sinus, preoperative assessment, surgical signs, surgical procedures, and management strategies for issues.
|
||||
## Review
|
||||
Anatomy and physiology
|
||||
The maxillary sinuses are a pair of air-filled cavities located in the bilateral maxillae that are situated laterally to the nasal cavity, inferior to orbital floors, superior to maxillary teeth, and anterior to the infratemporal fossa (as shown in Figure 1).Figure 1
|
||||
## Coronal view of the ostiomeatal complex. The uncinate process lies in a sagittal plane. The maxillary sinus ostium drains into the infundibulum.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
The average volume of these sinuses is 12.5 mL, making them the biggest of the paranasal sinuses [3]. The maxillary sinuses are coated by the Schneiderian membrane, which is composed of a cell cambium layer (osteogenic periosteal layer) on the bone sides and ciliated respiratory epithelium (pseudostratified columnar epithelium) on the lumen side. The infraorbital nerve travels through the middle of the maxillary roof in a posterior-anterior direction. The floor of the canal is usually made up of thick bone, although, in a few instances, it may be absent, leaving just a thin mucosal layer between the sinus cavity and nerve [4]. The sinus ostium is situated on the medial wall of the nose above the uncinate procedure, and it communicates with the ethmoid infundibulum in the middle meatus on the walls of the nose. Bony, thin septae that span from the lateral to medial sinus wall might be found in up to 37% of people, with 45.9% in the middle, 22.5% in the third anterior, and 31.5% in the posterior sinus. One or two septae are found in 89% of individuals with septae [5].
|
||||
The position as well as the presence of septa in the maxillary sinuses may have an impact on the treatment plan, and if they are not identified before the surgery, it can cause perioperative complications. This will be reviewed in detail later. The cilia of the Schneiderian membrane play a vital function in guiding the discharge of mucus and debris toward the ostium, thereby maintaining constant drainage in normally functioning sinuses. Certain medical conditions may increase the risk of chronic sinusitis in some patients. Allergic rhinitis can cause inflammation of the mucosa close to the ostium, resulting in inflammation and obstruction of mucous discharge, causing painful sinus pressure and stagnant fluid infection. Dysfunctional sinus cilia can cause a buildup of mucus and debris, which can cause infection since the sinuses are unable to remove the debris and regular discharge [6].
|
||||
Indications and contraindications of sinus augmentation
|
||||
The main reason for performing a sinus graft surgical procedure is to prepare for posterior maxilla implant reconstruction that has suffered from bone loss after tooth extraction and sinus pneumatization. In such cases, the bone has become too atrophic to support implants (as shown in Table 1). Sinus graft surgery is appropriate for a range of cases, including single-tooth as well as multi-tooth reconstruction and complete reconstruction of the posterior maxilla in edentulous patients.Table 1
|
||||
## Indications for sinus lift surgery
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
Condition
|
||||
Treatment
|
||||
Edentulous maxilla with severely atrophic maxilla and pneumatized sinus
|
||||
Open sinus lift via lateral maxilla sinus antrostomy; delayed implant placement
|
||||
Edentulous maxilla with some remaining alveolar bone (0-4 mm)
|
||||
Open sinus lift via lateral maxilla sinus antrostomy; delayed implant placement
|
||||
Edentulous maxilla with some remaining alveolar bone (5-10 mm)
|
||||
Open sinus lift via lateral maxilla sinus antrostomy; immediate implant placement
|
||||
Single-tooth edentulous space with 5-7 mm of alveolar bone remaining
|
||||
Open sinus lift via lateral maxilla sinus antrostomy; immediate implant placement
|
||||
Single-tooth edentulous space with >8 mm of bone remaining
|
||||
Open sinus lift via lateral maxilla sinus antrostomy or closed (crestal approach) osteotome technique; immediate implant placement
|
||||
Preoperative assessment
|
||||
A detailed dental, as well as medical history and physical examination, must be conducted prior to initiating maxillary sinus augmentation surgery. It is important to note any relevant positive history, like the latest upper respiratory disease, chronic sinus as well as sinusitis, otitis media, facial pain, past sinus or nasal surgery, prior maxillary reconstruction efforts, and smoking history. Studies have revealed that the complication risk for smokers who undergo sinus lift grafts is comparable to that of the common population, although there is an indication that smokers who have implants embedded in sinus transplanted bone have a greater rate of failure in comparison to non-smokers [7,8]. A preoperative CT scan is advised to evaluate the volume of bone already present, exclude preexisting sinus illness, and detect any bony septae [9].
|
||||
Informed consent
|
||||
Before beginning the maxillary sinus grafting surgery, it is crucial to have an informed consent discussion with the patient. This discussion should cover the benefits, risks, alternatives to the process, and the risks of alternatives. Common risks related to the procedure comprise bleeding, pain, swelling, graft failure, infection, and sensory changes to the second branch of the cranial nerve (V). It is important to note that smokers have a greater risk of implant failure, despite the potential success of the graft method. The eventual restoration of the edentulous maxilla is the main advantage of the procedure. The treatment can be substituted with a shorter implant, a three-unit bridge, zygomaticus implants, partial dentures, or angled implants. The risks of the alternatives should also be discussed. The patient must understand that the surgery is elective and that the decision to proceed is solely theirs after considering all the possible options. The expected timeframe for dental restoration after the procedure may exceed a year, and additional costs may be incurred. To help the patient understand the informed consent process, multimedia resources such as patient education videos, models, and radiographs can be used.
|
||||
Surgical techniques
|
||||
According to recent studies, maxillary sinus augmentation may be achieved using two techniques: the sinus intrusion osteotomy technique and the lateral window technique. These approaches for vertical augmentation in the oral cavity are regarded as the most reliable ones. These procedures can be carried out using many bone graft substances, comprising autogenous bone, xenograft, alloplastic, and allograft substances. Autogenous bone is thought to be an ideal graft for the sinus lift procedure because it offers enough feasible bone to initially support the implant and promote osseointegration [10]. Recent research has revealed that autogenous bone grafts are the better way because they maintain a sufficient alveolar ridge height for five to 10 years after initial insertion [11]. To enhance the amount of bone inserted into the maxillary sinus, demineralized freeze-dried bone may be combined with autogenous bone. Studies have revealed that adding demineralized freeze-dried bone to autogenous bone marginally reduces the level of bone attained; nevertheless, this change is insignificant clinically because the implants are still enclosed by bone [10].
|
||||
Autogenous bone grafts are reflected to be unique as they contain endosteal osteoblasts, which give them the capacity to form bone directly. Along with osteoblasts, a corticocancellous graft also releases growth hormones and bone morphogenic proteins (BMPs), which promote the production of new bone [12]. The proximal tibia, calvarium, anterior iliac crest, and maxillofacial areas are a few anatomical locations that can be used to harvest bone transplants. These methods, however, are outside the purview of this essay, so we will not go into more detail about how they work.
|
||||
Several sites, including the maxillary tuberosity, ramus, symphysis, mandibular third molar site, and posterior maxilla, can be harvested for intraoral bone. Even though maxillary tuberosity provides a smaller amount of bone (1-2 mL), it is located in a similar surgical field as the lateral technique for the maxillary sinus and should be considered [13]. In the posterior maxilla, toward the hamular notch, a crestal incision is made to obtain the graft, along with any necessary vertical releasing incisions. The incision is prolonged posteriorly to reach the tuberosity when the maxillary sinus is to be accessed via the lateral window technique. The posterior maxilla is shown by raising a full-thickness mucoperiosteal flap, which enables precise bone harvesting with a rongeur. During the procedure, it is crucial to prevent pterygoid plates, maxillary sinus, molar teeth, and a larger palatine canal to prevent complications (see Figure 2).Figure 2
|
||||
## A bone graft composite is packed into the sinus site. After approximately six months, implants are placed, followed by a final restoration after another six months.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
The symphysis is the location that produces the most intraoral bone [14]. To gain access to this area, a canine-to-canine vestibular incision must be made at least 3 mm from the mucogingival junction. The periosteum is raised, and the osteotomy is made 10 mm below the incisor tooth’s apex.
|
||||
A trephine with a collecting instrument positioned along the suction line is an appropriate instrument for bone harvesting. The cortical plate may be eliminated if required, and the bone marrow can be extracted (Figure 3). During the procedure, the mental nerve must be avoided, and the patient should be made aware of the enhanced hazard of V3 paresthesia brought on by this method. Related to this, bone can be extracted from the third molar sites in the mandible and posterior maxilla using a scraping tool by collecting a container coupled to the suction.Figure 3
|
||||
## Diagram showing the lateral wall of the maxilla rotated medially into the sinus, which is optional. The bone graft material is placed into the sinus, either in particulate material or block form, to support the implant. Ideally, the block grafts should engage the superior surface of the implant.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
Tatum first demonstrated the lateral window technique by utilizing a modified Caldwell-Luc method [15]. In this surgical approach, osteotomies are used to create a bone window that is then either removed or turned medially without rupturing the membrane of the sinus. First, a posterior superior alveolar nerve block, a superior anterior alveolar nerve block, and palatal infiltration are used to administer local anesthesia with epinephrine. A local anesthetic may be utilized in conjunction with general anesthesia or intravenous sedation, if necessary. Steroids and antibiotics are often given as preventative measures prior to the surgery, although the decision to use perioperative steroids and antibiotics should be at the discretion of the surgeon. Before beginning the procedure, it is uncertain whether preoperative administration of medication is beneficial or not. Therefore, the surgeon should carefully weigh the potential risks and benefits before administering such drugs. Before performing the incision, the patient is instructed to rinse his mouth with a 0.12% chlorhexidine solution.
|
||||
From maxillary tuberosity to the position immediately anterior to the anterior edge of the sinus, the crestal incision is created. In order to expose the sinus without impairing the sinus window, vertical releasing incisions should also be performed on the anterior and posterior sides to the depth of the vestibule. The maxilla lateral wall should then be revealed by elevating a full-thickness mucoperiosteal flap (Figure 4). Next, four linear osteotomies should be performed using a #6 or #8 round bur, starting with the inferior horizontal osteotomy, which must be performed as near to the sinus floor as feasible, a maximum of 2-3 mm above the floor, and extending posteriorly from the region of the first or second tooth to the anterior edge of the maxillary sinus (Figure 5).Figure 4
|
||||
## Bone harvesting
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from ElsevierFigure 5
|
||||
## The unicortical osteotomies form a rectangular outline in the symphysis
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
During the procedure of performing osteotomies, it is crucial to use a gentle touch and a brushing stroke to prevent any damage to the Schneiderian membrane. When carrying out the procedure in the presence of bicuspid teeth, extra care should be taken to avoid causing any harm to them, and the osteotomy must be limited to 4 mm from the distal aspect of the tooth. The next step involves performing the superior horizontal osteotomy at a height where augmentation is planned. Finally, the posterior and anterior vertical osteotomies are formed to connect the inferior and superior osteotomies. The osteotomies must run parallel to the lateral wall of the nose and the anterior edge of the maxillary buttress (or maxillary tuberosity), respectively (Figure 6).Figure 6
|
||||
## Incision and mucoperiosteal flap reflection
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
When the window is formed and the membrane is visible, any attached bone is taken out or rotated medially. If the bony window is rotated inwardly, it develops the floor of the maxillary sinus. To elevate the Schneiderian membrane, the process should begin by lifting the margins with caution and then progressively increasing the elevation. Over-elevation of one area should be avoided, as it can lead to perforation. The use of broad-based curettes or freers is recommended for membrane elevation. If possible, the membrane should be raised greater than the superior osteotomy. It is essential to lift the Schneiderian membrane above the superior osteotomy to avoid undue strain on the bone graft substance (Figure 7).Figure 7
|
||||
## Diagram depicting the ideal location of the sinus window preparation of the lateral maxillary wall. The inferior ostectomy should be approximately 1 mm above or level with the floor of the sinus. The posterior ostectomy should be at the corner of the maxillary buttress. The anterior ostectomy should be adjacent to and parallel to the lateral wall of the nose, and the superior ostectomy should be at the height of the intended graft.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
Sinus membrane perforation is possible during the procedure, which can lead to complications (Figure 8). Small perforations may not require treatment, but large ones should be patched with a collagen membrane, or the procedure should be aborted. If the treatment is unsuccessful, it should not be repeated for at least four to six months. After raising the membrane, bone graft material is positioned anteriorly and inferiorly beneath it, making sure not to overpack it (Figure 9). To account for volume loss, an extra 20% of bone graft material must be injected. After that, the mucoperiosteal flap is moved and sutured. Six months following the sinus lift treatment, implants can be inserted if there is enough alveolar bone to support them, and bone graft substance can be packed around them (Figure 10). Patients should be prescribed postoperative antibiotics and decongestants for two weeks and advised to take sinus precautions such as not blowing their nose and coughing or sneezing with their open mouth.Figure 8
|
||||
## Complete quadrilateral osteotomy
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from ElsevierFigure 9
|
||||
## The membrane is carefully elevated and reflected medially into the sinus.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from ElsevierFigure 10
|
||||
## The crestal incision is combined with anterior and posterior vertical release incisions to allow for exposure of the lateral wall of the maxilla. The lateral wall of the sinus is rotated medially with membrane reflection. A small perforation is seen.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
Piezoelectric technology is an ultrasonic tool utilized for making osteotomies. This scheme has a higher power than traditional ultrasonic instruments, enabling the creation of osteotomies in thicker, more compact cortical bone without cutting soft tissue. The benefit of this system is to decrease the hazard of perforating the sinus membrane. The piezoelectric tool may also help in the rise of the sinus membrane, especially in robust areas of thin membranes and bone. This system has various inserts, from osteotomes to diamond-cutting inserts to those that aid in lifting the sinus membrane. To elevate the membrane, the endosteum is separated from the bone, and the piezoelectric cavitation is subjected to the hydropneumatic pressure of a physiological saline solution (Figure 11) [16].Figure 11
|
||||
## Incision and mucoperiosteal flap reflection
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
A research study conducted by Vercellotti et al. [17] involved creating 21 bony window osteotomies in 15 patients using the Mectron Piezosurgery System with inserts that had a vibration from 60 to 210 mm and power exceeding 5W. Every osteotomy was carried out while being irrigated by a surgical system pump. After the flap was reflected, the bony window was formed by a piezoelectric scalpel, and then the membrane elevator tip was utilized, beginning at the apex and moving to the distal and mesial aspects. Attention was focused on the sinus floor, where the membrane was raised to limit the harm of perforation. In this study, all sinus augmentations utilized autogenous bone grafts and platelet-rich plasma. The research found just one membrane perforation in 21 patients, yielding a success rate of 95%.
|
||||
The sinus intrusion osteotomy is recommended for cases where there is a minimum of 5-6 mm of alveolar bone available. This method was demonstrated to increase bone height by 4-8 mm, but it is best suited for situations where having enough bone for implant stabilization and minimal bone height are required [18]. In 1994, Summers [19] originally reported the method, which entails creating a crestal incision, bone prepping, and raising the sinus by a few mm. During the procedure, not only is bone compacted apically and the sinus elevated, but bone is also compacted laterally with progressively larger osteotomes (Figure 12).Figure 12
|
||||
## Trephined bone core partially intruded into the sinus cavity
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
During the procedure described by Summers, a crestal incision is made, and implant drills are utilized to construct an osteotomy, leaving 1 mm of bone within the sinus membrane and site. Then, sequential osteotomes of progressively increasing diameter are utilized to determine the depth of the desired implant length, compacting bone apically and laterally, and elevating the sinus membrane. Once the required diameter and length are achieved, the bone graft substance is put in the prepared site’s apical portion (Figure 13). The implant is located at the desired length, ensuring its stability. The main closure is then completed by adding a cover crew. The healing abutment can be connected to the implant, and it can be exposed after four to six months of healing. Similarly, Komarnyckyj and London [20] also observed a 95.3% success rate when performing this process on 16 patients and placing 43 implants. This study demonstrated a mean bone increase of 3.25 mm throughout the follow-up period of nine to 47 months.Figure 13
|
||||
## Graft placed through the implant receptor site into the sinus cavity
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
BMP is an option for bone graft material for enhancing the maxillary sinus, which is gaining popularity in the field. BMPs are altering growth factors that have bone-inductive characteristics, and two recombinant human proteins, rhBMP-7 and rhBMP-2, are currently available [21]. BMPs offer several advantages over bone graft materials, including no morbidity at the harvest site, ease of use, increased soft tissue healing, and the ability to be used in people who are not candidates for autogenous grafts [10]. BMPs come in powder form and can be mixed with sterile water and applied to the carrier during surgery. Collagen is the most commonly used carrier material for maxillary sinus augmentation, but it does not have mechanical strength and should be utilized in an area with borders in every dimension [10]. The preferred method for utilizing BMP-2 for maxillary sinus augmentation is the lateral window approach, although there is limited evidence for its success with the sinus intrusion osteotomy technique. The procedure involves administering local anesthesia, making an incision, raising a full-thickness mucoperiosteal flap, creating bony osteotomies, and elevating the sinus membrane as earlier described. If a perforation in the membrane occurs, it is not mandatory to repair it when using BMP-2, but the surgeon may choose to do so. The BMP is provided in lyophilized powder form and reconstituted using sterile water, following the manufacturer’s instructions. The reconstituted BMP is loaded into a sterile syringe and applied evenly to the collagen sponge (Figure 14). It takes at least 15 minutes to let the liquid settle so that the BMP adheres to the sponge before it is cut into 15-mm strips and located among the bony floor and membrane of the sinus (Figure 15). Chromic gut sutures are used to achieve primary closure.Figure 14
|
||||
## BMP is placed on a collagen sponge, and the sponge is cut into five or six strips.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from ElsevierFigure 15
|
||||
## A BMP-impregnated collagen membrane is placed into the sinus with no membranes used to cover the sinus graft site.
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
A one-week course of antibiotics is prescribed, and the patient is advised to take sinus precautions. The patient must be notified about the likelihood of significant swelling. A postoperative panoramic radiograph may be taken after four months to assess bone formation, and implants may be located six months prior to the process. Boyne et al. [22] conducted an early study that demonstrated the successful usage of rhBMP-2 in 12 patients who received the material in their maxillary sinus. The average bone height was 8.51 mm. The most common postoperative adverse impacts were facial swelling, pain, redness, and rhinitis.
|
||||
Implants were inserted in the increased sinuses 12 weeks later and permitted to integrate for three months, in accordance with research comparing rhBMP-2 to anterior iliac crest grafts in 30 rabbits [23]. The rhBMP-2 group saw the largest mean vertical bone growth, and both groups’ bones had comparable quality, according to the research. It is essential to highlight, however, that recombinant BMP is contraindicated in individuals with hypersensitivity to proteins, carriers, or any other formulation substances. In addition, it should not be applied to people who have active cancers or are receiving cancer treatment, to those who have tumors that have already grown or been removed, to skeletally immature people, to women who are pregnant, or to people who have active infections. Patients who do not demand a separate way to get bone graft material may find that BMP is a good alternative.
|
||||
Postoperative instructions and management
|
||||
After surgery, it is important to provide patients with both printed and oral instructions regarding postoperative care. The patient should be advised to avoid consuming rough or hard foods, which can damage sutures and cause wound dehiscence. Additionally, sinus precautions should be taken, which include avoiding any activity that can result in sudden pressure variations in the sinus, like sneezing and nose blowing. If the patient needs to sneeze, they should do so with an open mouth to direct pressure away from the sinus. It is important to inform the patient about common postoperative symptoms, such as soreness, which is normal as well as expected for numerous days post-surgery. According to the postoperative instructions, it is common for a few patients to go through bleeding from the surgical incision for up to 24 hours after the sinus lift surgery. However, this bleeding may seem worse than it is because it can mix with saliva. The instructions advise that the patient should swallow the blood rather than expectorate it. If the bleeding becomes bothersome, it can be controlled by direct wet gauze pressure. If the bleeding persists after two uses of gauze for every hour or if the volume is concerning, the patient must notify the doctor. In addition, occasional skin bruising and swelling are normal after a sinus lift surgery.
|
||||
Complications and their management
|
||||
Schneiderian membrane perforation is the most frequent complication of maxillary sinus lift surgery (Table 2). In prospective observational, uncontrolled research, 70 patients had a total of 212 implant loadings after undergoing 81 sinus lifts. A total of 44% of sinuses have been intraoperatively perforated, but they were healed, and the operation was finished without difficulties. Moreover, 2% of sinuses experienced perforations so severe that the treatment had to be terminated. Furthermore, 33% of perforations were found in sinuses where septae were visible on preoperative radiographs, and 52% of the sinuses with septae were perforated. Two of the 36 holes were so serious that the surgery had to be terminated.Table 2
|
||||
## Common complications of sinus lift surgery
|
||||
Source: Stern and Green (2012) [2]; reproduced with permission from Elsevier
|
||||
Complication
|
||||
Treatment
|
||||
Graft exposure
|
||||
Gentle daily normal saline irrigation allows for creeping epithelialization
|
||||
No graft present after the maturation phase
|
||||
Assess for a possible etiology and retreat
|
||||
Paresthesia CN V2 distribution immediately postop
|
||||
Medrol dose pack if no contraindications
|
||||
Facial swelling two to three days post-surgery
|
||||
No treatment; normal postop
|
||||
Severe facial ecchymosis appearing one to three days postop
|
||||
No treatment; normal postop
|
||||
Facial pain and swelling one-week postop
|
||||
Clinical examination; CT scan; consider antibiotics
|
||||
Swelling and acute onset
|
||||
Possible air-emphysema; antibiotics; reinforce nasal precautions
|
||||
Common treatments for sinus perforation involve doing nothing if the perforation is <2 mm in diameter and placing a slowly resorbing collagen membrane if the perforation is >2 mm in diameter. In one patient who presented with acute sinusitis following implant placement, postoperative complications involved the extrusion of a graft into the sinus cavity. Following medical as well as surgical remedies, the infection cleared up, and implants were restored. Persistent peri-implantitis and a peri-implant cyst were among the issues that arose later. Importantly, even though membrane perforations have been linked to postoperative complications like local infection, pain, and swelling, there is no correlation between intraoperative perforations and long-term implant survival. This research revealed an overall survival rate for seven years of 95.5% for implants implanted in grafted sinuses. Noteworthy is the fact that five of the nine unsuccessful implants were implanted in heavy smokers. Instances of chronic infections resulting in severe sinusitis and the potential for graft extrusion, exposure, and/or failure are uncommon. Treatment usually depends on the symptoms that are currently present and may include antibiotics, drainage of surgical debridement, or a Caldwell-Luc technique [24-26].
|
||||
## Conclusions
|
||||
The maxillary sinus lift is a widely accepted standard treatment for edentulous maxillas, having been in use for the last 30 years. A very frequent occurrence is pneumatization of the maxillary sinus as a result of posterior maxillary tooth loss. Significant maxillary atrophy prohibits implant insertion in this location. Sinus augmentation was utilized for decades to prepare these areas for dental implant insertion.
|
||||
Transalveolar and lateral antrostomy procedures are the two most common methods for enhancing posterior maxillary vertical bone height. The clinical and radiographic evaluations identify the most appropriate treatment strategy for every clinical condition. Both methods were demonstrated to have greater success rates. There are few absolute contraindications to the sinus lift procedure, with most being relative contraindications. However, practitioners must be well versed in how to address them. Adequate preparation, knowledge, and experience make maxillary sinus augmentation and elevation a beneficial process for patients, with an expected outcome.
|
||||
@@ -0,0 +1,120 @@
|
||||
# Expert consensus on the clinical strategies for orthodontic treatment with clear aligners
|
||||
Wang Yan, Long Hu, Zhao Zhihe, Bai Ding, Han Xianglong, Wang Jun, Fang Bing, Jin Zuolin, He Hong, Bai Yuxin et al. (20 authors total)
|
||||
International Journal of Oral Science (2025)
|
||||
PMC ID: PMC11904224
|
||||
|
||||
## Abstract
|
||||
Clear aligner treatment is a novel technique in current orthodontic practice. Distinct from traditional fixed orthodontic appliances, clear aligners have different material features and biomechanical characteristics and treatment efficiencies, presenting new clinical challenges. Therefore, a comprehensive and systematic description of the key clinical aspects of clear aligner treatment is essential to enhance treatment efficacy and facilitate the advancement and wide adoption of this new technique. This expert consensus discusses case selection and grading of treatment difficulty, principle of clear aligner therapy, clinical procedures and potential complications, which are crucial to the clinical success of clear aligner treatment.
|
||||
|
||||
## Full Text
|
||||
## Introduction
|
||||
Malocclusion is a common oral disease with the estimated prevalence among general population ranging from 43.5% to 67.2%.1,2 It is associated with the risk of various oral dysfunctions and esthetic concerns, which may have detrimental effects on mental health and the quality of life.3–6 Recent years have witnessed the growing popularity of clear aligners among patients owing to their esthetic appeal, comfort, and convenience in oral hygiene maintenance.7,8 However, as a novel technology distinct from traditional fixed orthodontic appliances, clear aligner treatment (CAT) presents new challenges in case selection, treatment strategy, aligner design, and follow-up monitoring, which are associated with the differences in material characteristics and properties, and treatment outcomes.9–12 Therefore, key clinical aspects of CAT are demanded to help improve treatment efficacy and promote continued development and dissemination of this clinical technique.Clear aligners are removable orthodontic appliances that were first introduced two decades ago and have been used to treat nearly 20 million patients worldwide. Since their launch, significant innovations have been achieved in the development of clear-aligned materials. The use of big data analyses and design software has enabled the aligners to tightly envelope the tooth surface and apply gentle continuous force which can be designed based on the desired tooth-specific movement direction and distance. The optimal sequence of tooth movement can be calculated precisely to ensure that tooth moves in the desired direction.9,13 Furthermore, clinical solutions have evolved from optimizing individual to optimizing group teeth movement, while clinical indications have expanded from simple to complex cases, including surgical cases.14–16Consequently, CAT has become the primary innovating trend in orthodontics.14,17 To date, over 5000 publications on clear aligners have been indexed on PubMed, including case reports, clinical trials, retrospective clinical studies, and reviews, highlighting the on-going interest in this field.18–22 The purpose of this expert consensus was to summarize the core technology of CAT and provide clinical guidance for practitioners in terms of indications, treatment strategies, aligner design, and follow-up monitoring.
|
||||
## Case selection and grading of treatment difficulty
|
||||
## Indications and contraindications
|
||||
The current indications for CAT are comparable to those for fixed orthodontics. Clear aligners can be used to treat nearly all types of malocclusions, especially the patients with high esthetic and comfort requirements, poor periodontal conditions, susceptibility to caries, or enamel developmental defects. However, clear aligners are not recommended for patients with clinically short crowns, requiring extensive mesial movement of the posterior teeth, or showing poor compliance.20However, treatment difficulty of clear aligner therapy varies greatly among cases. Thus, we suggest difficulty-grading criteria for CAT.
|
||||
## Grading of treatment difficulty
|
||||
Clear aligners are made of elastic materials, and teeth are moved by the rebound force generated by the elastic deformations of the aligner materials when the aligners are positioned.7 Thus, aligners mainly provide a “pushing force”, and their clinical efficiency varies among different types of tooth movements (Fig. 1).23–27 Therefore, it is crucial to accurately assess treatment difficulty and select most suitable cases.Fig. 1
|
||||
Predictability of different tooth movements achieved through clear aligner therapyWe developed the CAT-CAT difficulty assessment tool,28 which assigns scores based on model analysis, X-ray examination results, and clinical examination results. According to the literature and authors’ clinical experience, clinical cases were divided into four grades: easy, moderate, difficult and challenging (Table 1).Table 1
|
||||
Grading of clear aligner treatment difficultyDifficulty levelSkeletal discrepancyCrowdingAnterior overjet/overbiteAmount of molar movementAssociated manifestationsTreatment approachCAT-CAT scoreEasyNoneMild crowding or spacingNormal or slight abnormalMolar distalization: <2 mm; mesial movement: 0 mmNoneNon-extraction; Arch expansion, IPR, or Mild incisor proclination<20ModerateMildModerate crowdingDeep overbite/overjetMolar distalization: 2–3 mm; Mesial movement ≤2 mmNoneMolar distalization, Bite jumping, or Extraction of premolars21–40DifficultModerate to severeSevere crowdingSevere deep overbite/overjetMolar distalization >3 mm; Mesial movement >2 mmAnterior open/crossbite; Posterior open/crossbite/scissor bite; Horizontal and/or vertical discrepanciesExtraction; Implant anchorage/elastics; orthognathic surgery41–60ChallengingDifficult cases with periodontal diseases, Temporomandibular Joint Disorders, missing molars, impacted teeth, molar protraction>60Owing to the biomechanical differences between CAT and traditional fixed orthodontics, it is imperative for clinicians to fully understand the characteristics of CAT and gradually implement treatment based on the difficulty level in each case to help minimize the associated risks.
|
||||
## Principles of clear aligner therapy
|
||||
Different from traditional fixed orthodontic appliances, clear aligners are made of elastic materials, which cover the whole or partial clinical crowns and create a “pushing” force produced from material deformation of the clear aligners. Thus, theoretically, the force can be designed to exert onto any part of the tooth crowns as long as it is closely covered by the aligners. Thus, the crowns’ surface area and the fitness of the aligners are the key points to the success of treatment. Attachments used in clear aligner treatment are bonded on the crowns, which can not only increase the surface area but also afford more action points of the force. Attachments in various shapes and sizes can be designed to supplement clear aligners for different biomechanical demands.Besides, as we know, several types of arch wires made from different materials and in different shapes and/or sizes are used in traditional fixed treatment. In general, arch wires are used from thin to thick, round to rectangular, Niti to stainless steel, and therefore soft and flexible to solid and stable during the treatment. By doing so, teeth movement can be controlled in a predicted way. However, in clear aligner treatment, for each brand, the same aligner material is used throughout the whole aligner treatment, which is not as flexible as Niti wire nor as stable as stainless-steel wire. Thus, to move individual and/or group of teeth, tooth movement need to be designed in a stepwise mode, according to the natures of specific tooth movements.Moreover, aligners’ elastic force is directly proportional to the amount of material deformation within a certain range, whereas excessive deformation can lead to plastic deformation, resulting in a loss of the force. Additionally, all the elastic force decreases with the deformation time.9 Therefore, when designing clear aligners, a series of intermediate statuses is used to bridge the initial and final status. The aligners are regularly replaced, helping the teeth move gradually to the desired position under the effect of a continuous gentle force (Fig. 2).Fig. 2
|
||||
A schematic illustration of the principles of clear aligner therapy for incisor retraction in a premolar-extraction case. A final set-up is designed based on the initial set-up and a final aligner is fabricated based on the final tooth set-up. The final aligner is topologically distinct from the pre-treatment dentition and should be elastically stretched for being fitted onto the dentition. The stretched aligner on the pre-treatment dentition is activated and generate retraction force on the anterior teeth and protraction force on the posterior teeth, resulting in premolar-extraction space closureThus, the initial, intermediate and final positions are the three keys to the success of clear aligner therapy. The initial position is determined based on patients’ characteristics, especially the digital dental models that capture the intraoral dentition and occlusion. Intermediate positions aim to ensure that the path and rate of tooth movement comply with the biological and biomechanical principles of orthodontic tooth movement. The ideal final position necessitates well-aligned dental arches, normal anterior overjet/overbite, and perfect posterior interdigitations.Therefore, CAT is essentially a process of tooth repositioning in three dimensions. A critical aspect of this process is the acquisition and redistribution of space. There are currently five main methods for gaining space: arch expansion, molar distalization, incisor proclination, interproximal reduction (IPR), and extraction.29–32 Clinical treatment plans should be designed based on individual cases.Next, we will discuss specific strategies for various clear aligner treatments in details, based on the methods of gaining space.
|
||||
## Clinical procedures of clear aligner treatment
|
||||
As illustrated in Fig. 3, clear aligner treatment encompasses nine procedures in clinical practice, starting from diagnosis, clear aligner treatment difficulty assessment based on CAT-CAT, acquisition of digital models and aligner treatment planning. Once the aligner treatment planning is ready, aligner fabrication ensues. Then, clear aligner treatment progresses to clinical section that involves fitting of initial set of aligners, follow-up appointments and monitoring, and end of the active clear aligner treatment. Lastly, retention is required and important following orthodontic treatment.Fig. 3
|
||||
The overview procedures of clear aligner treatment
|
||||
## Diagnosis
|
||||
The precise initial position of the teeth requires complete and accurate patients’ data. And thus, data collection for CAT is essential, including facial and intraoral photographs, radiographic data [panoramic tomography, cephalometric radiographs, and cone beam computed tomography scans (CBCT)], and digital dental models that can be obtained through silicone rubber (PVS) impressions or intraoral scanning.33,34 Based on these patient data, a meticulous diagnosis is established.
|
||||
## CAT-CAT aligner difficulty assessment
|
||||
Orthodontic treatment goals are similar, regardless of treatment modalities. CAT plans should be based on patient complaints, presentation, and diagnosis. CAT can make orthodontic treatment easier, faster and more effective. However, before patients can be recommended for CAT treatment, difficulty level should be assessed (Table 1) to ensure patient suitability. And clinicians should ensure that they have made the correct diagnosis and appropriate treatment plans.28 As for some difficult or challenging cases, such as patients with severe periodontitis or needing surgical treatment, multi-disciplinary treatment (MDT) and specialists’ guidance are necessary.
|
||||
## Digital models
|
||||
As mentioned above, digital models can be acquired through either intraoral scanning or PVS impression taking.
|
||||
## Aligner treatment planning
|
||||
Recently, we developed a novel clear aligner treatment philosophy—biomechanics-guided, esthetics-driven, periodontium-supported and temporomandibular joint-compatible clear aligner therapy (BEPT-CAT)—that can guide practitioners to perform aligner treatment planning.35 Most cases of malocclusion are caused by “incorrect” tooth position, resulting in the discrepancies in necessary and available space. And thus, the treatment principles focus on either increasing the amount of space available or reducing the tooth amount. Common clinical methods for increasing the available space include arch expansion, molar distalization, and incisor proclination, while methods for reducing the tooth amount include IPR and extraction.36,37
|
||||
## Arch expansion
|
||||
## Indications
|
||||
Narrow dental arch: a narrow dental arch can be determined based on the relationship between the most prominent points on the buccal surfaces of the crowns of the lower posterior teeth and the Wala ridge.38 Pont index analysis and Howes value can also assist in the width assessment.39 Pretreatment CBCT can be used to clarify the spatial relationship between the root and alveolar bone, which helps avoid excessive expansion that may result in bone fenestration or dehiscence.Excessive buccal corridor: excessive buccal corridor refers to excess negative space between the dental arch and the buccal mucosa of the oral cavity. Previous studies have shown that an excessive or insufficient buccal corridor jeopardizes smile esthetics.40,41 An excessive buccal corridor is indicative of the arch expansion.
|
||||
## Considerations for final position design
|
||||
Factors that must be considered include arch symmetry, arch coordination, and appropriate expansion amount to prevent bone fenestration or dehiscence. The volume of basal bone on buccal side should be analyzed in CBCT to determine the upper limit of the expansion. The amount of up-to-2 mm expansion on each side is safe in most cases. As for adolescents, the greater regenerative potential of alveolar bone remodeling makes arch expansion much safer. To prevent buccal inclination of crowns during expansion, the final position design should ensure that all the expanded posterior teeth are in lingual inclination (from the lateral view, the palatal cusps are invisible) (Fig. 4).42Fig. 4
|
||||
Aligner treatment planning for arch expansion. a A narrow upper arch is to be expanded. b From the buccal view, the palatal cusps of the molars can be observed (yellow arrows). c From the posterior view, the palatal cusp (yellow arrow) is more occlusal than the buccal cusps. d Buccolingual angulation of the molar is modified and a buccal root-torque is added. e The palatal cusps cannot be observed from the buccal view
|
||||
## Attachment design
|
||||
Attachments are required on the buccal surfaces of teeth during arch expansion to prevent buccal inclination. For teeth with inadequate height of lingual cusps, lingual attachments may be placed simultaneously.43
|
||||
## Considerations for staging
|
||||
It is recommended to design a staged expansion for any expansion exceeding 1 mm unilaterally, such as a “V-pattern” design like molar distalization. Homonymous teeth in the same jaw are suggested to expand simultaneously because they can act as reciprocal anchorages.By adhering to these principles, clinicians can effectively incorporate arch expansion into clear alignment treatment plans, ensuring optimal outcomes in patients with dental arch discrepancies.
|
||||
## Molar distalization
|
||||
## Indications
|
||||
Almost normal facial pattern with distal (Class II) or mesial (Class III) molar relationship may be an indication for molar distalization. It may be accompanied by mild to moderate crowding, deep overjet, or an anterior crossbite/edge-to-edge bite. However, molar distalization is not generally recommended for neutral molar relationship (Class I).44,45Sufficient space in the posterior dental arch is necessary for molar distalization. CBCT evaluation from a three-dimensional perspective is recommended for molar distalization greater than 2 mm. Vertically, the presence of a low maxillary sinus increases the difficulty of upper molar distalization, especially when the molar roots penetrate the cavity. Third molar extraction is recommended to reduce distalization resistance and provide more space.44,46
|
||||
## Considerations for final position design
|
||||
The upper limit of molar distalization of clear aligner treatment depends on the available retromolar space. The third molars can be extracted if there is no sufficient space. The amount of less than 2 mm molar distalization on one side is considered predictable in most cases while the mesio-distal inclination of posterior teeth and the potential of bone growth in children and adolescents should be taken into consideration.Based on the literature and clinical experience, the predictability of molar distalization using clear aligners is approximately 88%.23 Thus, it is feasible to design the final position based on the actually required distalization distance (i.e., to obtain a neutral relationship) where no or minimal overtreatment is required. Additionally, to prevent labial fenestration and/or dehiscence in the lower anterior region, it is necessary to avoid labial movement of the lower anterior teeth, particularly the roots. This is because class II intermaxillary elastics are commonly applied during upper molar distalization, which exert a mesial force on the lower arch and labially push the lower anterior teeth.47
|
||||
## Attachment design
|
||||
Molar distalization does not require the supplement of attachments. However, attachments are recommended to enhance the grip of teeth with short crowns. Moreover, molar distalization is often accompanied by other complex movements such as intrusion and rotation, and attachments are usually required to improve the success rates of these movements and prevent off-tracking. Traditional rectangular attachments are generally designed for the canines to increase the retention of aligners and minimize the impact of precision cuts.48–50
|
||||
## Intermaxillary elastics
|
||||
When clear aligners exert a pushing force to achieve molar distalization via material deformation, the counteracting force may procline the anterior teeth. Thus, if anterior tooth proclination is undesirable, the anchorage of the anterior teeth should be reinforced. Intermaxillary elastics are commonly used in practice to achieve this aim.45In maxillary molar distalization, precision cuts are designed at the maxillary canines, whereas buttons are bonded to the buccal surface of the mandibular first molars (cut out on lower aligners) to allow the use of Class II intermaxillary elastics (Fig. 5a).51 If simultaneous eruption of the canine is desirable (e.g., low positioned or insufficiently erupted canines), a button can be bonded to the labial surface of canine near the gingival margin to facilitate eruption (Fig. 5b). However, precision cuts at the mandibular molars are prone to aligner displacement or off-tracking and are not recommended. Additionally, if necessary, implant devices can be used to enhance the anchorage, provided they do not obstruct molar distalization.52–54 On the other hand, if the proclination of anterior teeth is desirable (e.g., Class II Division 2), it can be designed simultaneously with molar distalization, acting as reciprocal anchorage to eliminate the need for any elastics.55 Nevertheless, anterior proclination and molar distalization should be closely monitored during follow-up appointments for real-time adjustments.Fig. 5
|
||||
Different modes of elastic tractions. a Class II elastic traction is applied on the precision cut on the upper aligner. b A cut-out is designed on the upper canine and class II elastic traction is engaged ono the button on the canine
|
||||
## Considerations for staging
|
||||
The staging of tooth movements involves the consideration of anchorage. Typically, molar distalization is designed in a “V-patten” staging, in which the second molars are moved first, and then the first molars once the second molars have reached the halfway point of their total moving distance; thereafter, the second premolars start to move once the second molars have completed their “journey” (Fig. 6a). Thus, no more than four teeth are distalized at each stage (V-pattern).56 Finally, the space created by canine distalization can be used to align and/or retract the anterior teeth. By doing so, the anchorage is often adequate for most distalization cases; however, a long-term treatment is unavoidable.48 In some cases, in order to shorten the treatment duration and increase patient compliance and cooperation, alignment of the anterior teeth is performed simultaneously with molar distalization, allowing patients to observe quick esthetic changes (Fig. 6b). In addition, implant screws can be used to strengthen anchorage, allowing more teeth to distalize simultaneously, to shorten treatment duration (Fig. 6c).57–59Fig. 6
|
||||
Different aligner design patterns for molar distalization. a Strict V-pattern. Molars, premolars and anterior teeth move sequentially. b Modified V-pattern. Incisors move alongside molar distalization. c The first and second molars move simultaneously
|
||||
## Proclination of anterior teeth
|
||||
## Indications
|
||||
Patients presenting with straight or concave facial profiles and retro-inclined or upright anterior teeth accompanied by mild crowding, such as cases with deep overbite caused by lingual inclination of the upper anterior teeth, are indicated for proclination of anterior teeth, which can be combined with other methods to obtain enough space.
|
||||
## Considerations for final position design
|
||||
The sagittal position and proclination of the anterior teeth, especially the upper anterior teeth, are crucial for facial esthetics and are one of the main indicators for profile analysis.60–63 Thus, the degree of proclination of the anterior teeth should be carefully evaluated based on facial morphology, and a combination with other methods that help acquire sufficient space should be considered. For patients with a severe lingually inclined deep anterior overbite, the roots-and-bone relationship should be considered. The roots need to be positioned within the cancellous region of the alveolar bone.64,65 Theoretically, a proclination of 1 mm (2.5°) in the anterior segment provides 2 mm of space. Therefore, the proclination design in the final position is based on the amount of space required, facial morphology, and the roots-and-bone relationship.66
|
||||
## Attachment design
|
||||
More than 3° of incisor proclination activates the power ridge in the designing software system, which applies labial-torquing force on the crowns, whereas lingual-torquing force on the roots and effectively achieves root-controlled movement of the anterior teeth.67 Traditional attachments on canines are recommended to reduce the risk of aligner off-tracking in the anterior segment.
|
||||
## Considerations for staging
|
||||
A minor proclination can be synchronized with the alignment of mild crowding. However, in cases with lingually inclined deep overbite, staged tooth movement is required. Proclination is first performed to torque the roots into the cancellous bone, and then followed by intrusion and retraction of the anterior teeth.
|
||||
## Interproximal reduction (IPR)
|
||||
## Indications
|
||||
Although IPR is a method for gaining space, it has always been controversial because of the potential damage to the enamel and the resulting risk of caries. The authors suggested that IPR should be used as a supplement to other methods, rather than as the primary method, to gain space. The following situations warrant an IPR design29,31:Bolton discrepancy due to the missing teeth or malformed teeth.Gingival embrasure defects (black triangles) due to periodontal disease.Poor crown morphology with contact points nearby the incisal edge.
|
||||
## Considerations for final position design
|
||||
In general, IPR is designed in the anterior segment, if needed. It is advisable to limit the maximum amount of IPR to 0.25 mm on the proximal surface of each tooth. Studies have shown that IPR amounting to no more than 50% of the enamel thickness generally does not increase the risk of caries.68–70
|
||||
## Considerations for staging
|
||||
Since the IPR site is the anatomical contact point of the crown rather than the actual contact point, restoring normal contact points first undoubtedly facilitates IPR performance. However, in practice, there may be situations in which insufficient space hinders the alignment of the dental arch, which requires a comprehensive assessment of the timing of IPR. Graded IPR is recommended to alleviate this contradiction. Fluoride application after IPR performance is suggested.
|
||||
## Tooth extraction
|
||||
Tooth extraction is a common method for reducing tooth amount in orthodontic treatment and is mainly indicated when the discrepancy between the available and required space exceeds 8 mm, such as in cases with severe crowding or severe maxillary and/or mandibular protrusions. Two types of tooth extraction patterns are commonly used in clear alignment treatment: extraction of lower incisor and extraction of premolars (first or second).
|
||||
## Extraction of lower incisors
|
||||
## Indications
|
||||
An almost normal facial pattern with stable posterior occlusion, no indication for upper extraction, and the total required space in the mandible exceeding 6 mm.Bolton ratio discrepancy due to missing teeth or malformed teeth in maxilla.Poor prognosis of a lower incisor due to periodontal disease or dental trauma.
|
||||
Considerations for final position design: The extraction of a lower incisor results in the lack of the midline of the lower dental arch. Instead, the long axis of the lower central incisor may be designed as the lower midline. In most cases, IPR of the upper anterior teeth is necessary to resolve the discrepant Bolton ratio and achieve normal anterior overbite and overjet.71
|
||||
Attachment design: it is recommended to design vertical rectangular attachments or root-control attachments on the adjacent teeth to the extraction space, which facilitate the reciprocal movement of the adjacent teeth, especially their roots.72
|
||||
Considerations for staging: extracting a lower incisor can effectively relieve crowding in the lower anterior section and provide space for the intrusion of the lower anterior teeth, resulting in a high rate of treatment success. Therefore, special staging considerations are generally not required.
|
||||
## Extraction of the first premolars
|
||||
Based on the symmetry principle, the extraction of the first 4 premolars is the most common pattern of extraction in orthodontic practice. However, cases needing the extraction of 4 premolars belong to difficult level in CAT (Table 1), and clinicians need to reach a certain level of orthodontic experience to complete the treatment.Indications: Extraction of the first 4 premolars is indicated when the discrepancy between the available and required space exceeds 8 mm, such as cases with severe crowding and/or bimaxillary protrusion, and etc.73Considerations for final position design: most cases with tooth extraction are challenging to treat, as extensive tooth movement is unavoidable, requiring three-dimensional repositioning of these teeth. Treatment success relies on the torque control of the anterior teeth and the mesial-tipping avoidance of the posterior teeth.74–76 Therefore, the final position requires an over-treatment design, as follows:Anterior teeth exhibit a labial inclination with incisor angles of approximately 120°. To prevent excessive lingual inclination, adequate labial inclination and torque control (root-lingual torque) should be designed during the whole procedure of anterior retraction.77 Cases with more lingual inclination at the initial and/or longer retraction distances require a larger positive torque in the design.78Anterior teeth are in a shallow overjet/overbite or edge-to-edge position without occlusal contact. The pendulum effect of anterior retraction, compounded by any pre-existing deep bite condition, may require the over-treatment of anterior intrusion.Canines are mesially tipped with the roots closer to the extraction space.Posterior teeth are distally tipped, with additional negative torque to prevent buccal inclination of molars and loss of posterior anchorage.79Attachment design: In such cases, attachment design should consider the following:Power ridge on incisors is recommended to aid in the torque control of the anterior teeth, which can be activated when more than 3° root-lingual torque is designed.Optimized attachments with strong root control or traditional rectangular attachments are recommended for the canines.74Horizontal rectangular attachments with strong retention are recommended for posterior teeth.Intermaxillary elastics: To increase posterior anchorage, Class II elastics can be designed during anterior retraction (precision cuts at the upper canines and bonding of buttons on the buccal surface of the lower first molars). Alternatively, implant anchorage can be used in the anterior region to assist the intrusion and body retraction of the anterior teeth.80–82 Different modes of elastic tractions with or without mini-implants and their corresponding biomechanics are displayed in Fig. 7.Fig. 7
|
||||
Different elastic tractions and biomechanical features. a A class II elastic traction is applied between the precision cut on the upper canine and the button on the lower first molar. Since the traction force (blue dashed line) passes occlusally to the center of resistance (red dot) of the upper anterior teeth, a clockwise moment (blue curved arrow) is generated. b An elastic traction is engaged between the precision cut on the upper canine and a buccal mini-implant. Likewise, a smaller clockwise moment (blue curved arrow) is generated. c One elastic traction is applied between the precision cut on the canine and a buccal mini-implant and the other one is engaged between the aligners on the incisors and a labial mini-implant. The retraction force (blue dashed line) generates a clockwise moment (blue curved arrow) while the intrusion force (yellow dashed line) offers a counterclockwise moment (yellow curved arrow). The two moments are offset by each other and the anterior teeth are retraction in a bodily movement modeConsiderations for staging: a personalized design is suggested for each case. The staging design should vary according to the specific circumstances because of the complex and variable nature of extraction cases. However, in most cases, we recommend distalizing canines and distal tipping of the posterior teeth (anchorage preparation) first. When canines complete the first third of the total moving distance, 6 anterior teeth start to move simultaneously by then. And finally, mesial movement of the posterior teeth begins when anterior teeth movement is completed. To prevent the “bowing effect”, it is suggested to avoid mesial movement of the posterior teeth simultaneously with the retraction of anterior teeth.
|
||||
## Extraction of the second premolars
|
||||
Indications: In the following cases, second premolars are extracted instead of first premolars, which usually increases the treatment difficulty. Clinicians should be cautious to make a treatment scheme design like this:Serious damage/abnormality on the second premolar and/or its periodontal tissue.Second premolar is impacted or blocked-out of the dental arch.Minimal anchorage design.Considerations for final position design: Compared to those in the first premolar extracted case, molars should be designed with more distal inclination (anchorage preparation) since the molars are more prone to mesial tipping, especially in the cases that more than 3 mm mesial movement of molars is required (minimal anchorage design), while less over-treatment of anterior teeth is needed.Considerations for staging: we suggest, firstly, a sequential distal movement of the first premolars and canines, and distal-tipping anchorage preparation of the first molars. Then, move anterior teeth afterwards. And finally, mesially move the molars sequentially.
|
||||
## Bite jump (surgical and growth jump)
|
||||
A bite jump refers to the changes in the three-dimensional position of the mandible and/or mandibular dental arch resulting from intermaxillary elastics, self-growth, and/or orthognathic surgery. It is important to note that the design of bite jump should be tailored based on the specific circumstances of the patient, and clinical feasibility should be considered. Except orthognathic surgery, bite jumps caused by other methods develop gradually in clinical practice, which can span the whole course of treatment.Indications:Adolescents with mild skeletal or functional mandibular hypoplasia or retrognathia;83,84Functional Class III, with the mandible being able to retrude to edge-to-edge occlusion;Severe skeletal deformities requiring orthodontic-orthognathic treatment22;Mandibular malposition caused by premature individual tooth contacts.Intermaxillary elastics: The sagittal bite jump requires the use of intermaxillary elastics or orthodontic appliances with mandibular advancement function.85,86Considerations for staging: In the design software, bite jump can be placed at any stage of the treatment or throughout the treatment process. The authors typically place bite jump at the end of the treatment, which makes it easier for clinicians to assess the amount and direction of the jump and detect any abnormalities in a timely manner during clinical monitoring.Below, we are going to delve into some special considerations in clear aligner design. A lot of clinicians are confused by these issues in practice.
|
||||
## Special considerations in clear aligner design
|
||||
Over-treatment design: as we discussed before, clear aligners exert mainly a “pushing force”, and therefore their clinical efficiency varies among different types of teeth movements (Fig. 1). To better realize the actual teeth movement, over-treatment design is recommended in some cases, which is related to the predictability of CAT. For example, to intrude anterior teeth and correct deep bite, a shallow overbite and even open bite is designed in the final position, while large positive torque may be given to the incisors which are lingual inclined or up-righted initially when retraction of anterior teeth is required to correct the convex profile. However, the appropriate amount of over-treatment design is determined case by case, and until now, there is no consensus on this specific issue. According to our experience and previous clinical studies, the amount of over-treatment should be designed based on the initial status of teeth and the type and amount of the teeth movement.78,79Challenges and strategies in the complex tooth movements: compared to expansion and molar distalization, intrusion, extrusion and torque control are more complex tooth movements in CAT, which have much lower predictability (Fig. 1). Thus, over-treatment is commonly designed for these types of movements.Besides, sufficient space for tooth movements should be taken into considerations. For intrusion, the root-and-bone relationship needs to be analyzed in CBCT images to make sure that the roots are in the cancellous bones, while for extrusion, the intermaxillary space is required. And loose proximal contact points are always good for the movement.Then, sufficient anchorage for the movement is important. There are usually two ways to strengthen anchorage in CAT. One is to move teeth in a stepwise mode. We recommend a “Frog pattern” staging for anterior teeth intrusion, in which incisors and canines are intruded separately and in cycles (Fig. 8). Extrusion of posterior teeth is suggested to be designed in a “V pattern” staging. Besides, power ridge design and positive torque is distributed in the whole procedure of incisor retracting to provide a better torque control. The other way to enhance anchorage is to use auxiliary devices and elastics, such as temporary anchorage devices (TAD) implanted in the anterior section to provide an extra intruding force and root lingual torque on anterior teeth (Fig. 7).Fig. 8
|
||||
Staging design for the intrusion of anterior teeth in the lower arch. a Incisors and canines are intruded in an alternate mode. Incisors are intruded first (referred to stage 1), followed by the intrusion of canines (referred to stage 2). Then, incisors are further intruded (referred to stage 3). b Lower arch models showing intrusion of canines and incisors corresponding to the aforementioned three stages. c Anterior and side views showing the successful intrusion of the anterior teethFurthermore, appropriate attachment design could provide clear aligners with greater retention, which is the key for CAT. Traditional attachments on premolars are recommended when intrusion of anterior teeth is needed while traditional attachments on canines are suggested for incisor’s torque control.Differences in the design of CAT between adolescents and adults: as we know, the main difference between adolescents and adults is growth potential which may lead to different orthodontic treatment plan. Mandible growth can result in anteroposterior bite jump, and thus, bite jump design without surgery is more possible to realize in adolescents. Besides, the prevalence of oral caries is higher in adolescents, and therefore, interproximal reduction (IPR) design should be used more cautiously. Moreover, traditional attachments or optimized attachments in larger size are recommended in adolescents due to their inadequate crowns. A recently published expert consensus on adolescents’ orthodontic treatment has deeply discussed this special issue.6
|
||||
## Aligner fabrication
|
||||
Once aligner treatment planning is ready, clear aligners that move teeth incrementally can be fabricated based on either thermoforming or 3D printing.
|
||||
## Fitting of initial set of aligners
|
||||
Patients are informed to the clinic for the initial appliance placement when clinicians receive the aligners. On this day, the resin attachments are bonded onto the teeth according to the digital design, and the first set of aligners is tried in (fitness should be checked). Subsequently, patients are issued a set of instructions, including the required wearing duration, method of aligner placement, and usage of chewies. The patients are also informed about the importance of oral hygiene. Additional information and instructions are provided to the patients, as relevant, depending on the tooth movement plan, such as molar distalization, IPR, or extraction.
|
||||
## Follow-up monitoring
|
||||
## Patient compliance management
|
||||
Regular follow-up visits are essential and can be used to inform patients about treatment progress and challenges, helping them understand their roles in the process, increasing their confidence, compliance, and cooperation.18,87Cooperation in the long duration of orthodontic treatment is a huge challenge to majority of people, especially persisting in wearing clear aligners day by day. Thus, close contact with patients helps to know their status and give them a hand or timely reminding if needed. Pleasure communication and compliments on patients are always effective in maintaining good relationship between clinicians and patients, which is beneficial for the cooperation as well. To encourage patients, practitioners can show them the changes already occurred by comparing with their pre-treatment photos and inform them that all these changes are owing to their compliance and cooperation. Let patients be aware of that their efforts will pay back. By doing so, patients will be more confident in the treatment.Besides, some application programs registered by patients’ ID number can be used on smart cell phone to help record the wearing date and remind to change a new set, which is convenient for patients in daily life.
|
||||
## Things to do in the follow-up visits
|
||||
To evaluate treatment progress, comprehensive examinations should be performed, including the following assessment:Tooth and periodontium status assessment, including mobility, premature contact presence, and occlusal trauma.88,89Occlusion changes, including the sagittal relationship, occlusal contacts, inclination, midline of upper/lower dental arch, overjet, overbite, torque and space, comparing to baseline and digital design.Temporomandibular joint health assessment should interrogate any pain, tenderness, and clicking in the joint area, especially in patients with temporomandibular disease before treatment and in adult patients using intermaxillary elastics.90–93Any detachment and/or abrasion of attachments should be checked according to digital design.94Aligner fitness assessments account for the progress in tooth movement, especially any gap observed in the space from the incisal edges of the anterior teeth, cusps of the posterior teeth, and the area around the attachments and along the aligner margin.
|
||||
## Management of off-tracking
|
||||
Off-tracking refers to the incomplete fitting between the teeth and aligners, indicative of a discrepancy between the direction and/or distance of actual tooth movement and that planned in the digital design (Fig. 9). The management of off-tracking involves removing attachments and using aligners to guide the off-tracking teeth back into the desired path using intra-/inter-maxillary elastics. Off-tracking manifestations can be categorized into the following three situations:Off-tracking in the vertical dimension due to insufficient extrusion or anterior intrusion.95 Insufficient extrusion may manifest as uniform vacuoles emerging at the incisal edges or cusps and can be managed by removing the attachments on the off-tracking teeth and applying intra-/inter-maxillary elastics (Fig. 10a). Alternatively, in cases of insufficient anterior intrusion, which manifest as inadequate correction of the anterior deep bite, auxiliary devices, such as implants or redesigning additional aligners to increase the staging design for tooth movement, may be added.Off-tracking in the horizontal dimension commonly occurs in rotation correction, especially in severely rotated premolars.96 The removal of attachments and use of a power chain can be helpful in most cases (Fig. 10b).Off-tracking in the sagittal dimension is characterized by mesial inclination of the posterior teeth and torque loss of the anterior teeth (lingual inclination).75,76 Mismatches between the attachments and vacuoles on the aligners can be observed on mesially inclined posterior teeth, as well as the gaps between the mesial cups and aligners. Distal up-righting of these off-tracking teeth must be performed using intermaxillary elastics and/or sectional arch wires after the removal of the attachments (Fig. 10c, d).The loss of anterior tooth torque manifests as lingual inclination of the upper/lower anterior teeth, increased overbite, early contact of anterior teeth, and posterior open bite.97 In such cases, the aligners may need to be redesigned to restart the program.Fig. 9
|
||||
Aligner off-tracking. a Off-tracking of upper incisors (yellow arrows). b Off-tracking of a lower incisor (yellow arrow). c Off-tracking of a lower canine and first premolar (yellow arrows). d Off-tracking of an upper premolar (yellow arrow). e Off-tracking of an upper premolar and molar (yellow arrows). f Off-tracking of a lower molar (yellow arrow)Fig. 10
|
||||
Strategies for resolution of tooth off-tracking. a A “boot-strapping” technique was used to address the off-tracking of a lateral incisor by applying labial-lingual elastic traction. b A power chain was used to correct under-derotation of a second premolar. c A vertical elastic traction from the upper premolar to the lower molar was implemented to correct mesial tipping and intrusion of the lower first molar. d A segmental archwire technique was applied to correct mesial tipping of a lower second molar
|
||||
## Timing and considerations of program restart
|
||||
Sometimes not only one series of clear aligners are needed to complete the treatment. There are five possible reasons for this:The discrepancy between designed tooth movement and actual tooth movement, which result in an incomplete correction of the malocclusion, often occurring in some complex tooth movement, like intrusion, root control and more than 3 mm molar distalization. More series of aligners are designed to accomplish the treatment goal.Unwanted tooth movement occurs and leads to reduced occlusal contacts or even open bite in posterior segment, which may be due to the aligners’ effect of occlusal pad. More series of aligners are designed to consolidate the occlusion.More teeth should be included into treatment, which is common in adolescents with erupting second molars. A new series of aligners are usually designed to cover these second molars and some heterotopic or impacted teeth, if any.The change of occlusal relationship may occur, due to mandible growth and/or removal of occlusal interference. Then, a completely new design should be done according to the new and stable occlusal relationship.Bad cooperation in patients, leads to serious off-tracking, and even totally unfitting. A new series of aligners are designed based on current status.
|
||||
## Treatment outcome
|
||||
Treatment is complete after waring the final set of aligners, if the treatment objective has been achieved. The criteria for ending CAT are consistent with those for ending traditional fixed orthodontic treatment. At the end of the treatment, the attachments and other auxiliary devices are removed, and retainers are prescribed as usual.
|
||||
## Retention
|
||||
Retention is of vital importance to clear aligner treatment. Different modalities of retention can be chosen based on patient-specific characteristics, e.g., periodontal condition, caries vulnerability, etc. Patients should be recalled to check tooth alignment, retainer fitting, and signs of relapse.
|
||||
## Complications
|
||||
CAT is associated with some risks to dental and periodontal health.
|
||||
## Caries
|
||||
Poor oral hygiene during CAT can disrupt the oral microbiota, leading to white spot lesions or even caries.98 However, compared to patients undergoing fixed orthodontic treatment, patients wearing clear aligners have lower levels of white spot lesions, total bacterial plaque, and cariogenic bacteria in the saliva.99–101 This may be related to the reduced detrimental effect of clear aligners on oral hygiene.
|
||||
## Root resorption
|
||||
CAT may lead to root resorption. However, it reported that CAT applied a gentler force, resulting in a lower rate and severity of root resorption, compared to those observed in fixed orthodontic treatment.102–105 Factors such as post-treatment root position (relationship with the cortical bone), extraction, tooth position, and specific tooth movement patterns (intrusion and extrusion) are all risk factors for root resorption, whereas post-treatment root position is most closely related to root resorption.106 Therefore, reducing the risk of root resorption requires limiting root movement within cancellous bone and avoiding unnecessary reciprocal movement. Furthermore, a clear aligner design software with a root-bone system makes the root-bone relationship visible in the digital design, which helps reduce root resorption risks.
|
||||
## Periodontal damage
|
||||
Standard orthodontic treatments do not cause periodontal damage. However, orthodontic appliances may increase the difficulty of maintaining oral hygiene, leading to a higher rate of gingivitis and periodontitis. Clinical trials have shown that, compared to fixed orthodontic appliances, clear aligners are more favorable for maintaining periodontal health in patients.107–110 Moreover, for cases with an unsatisfactory periodontal status, design changes can help mitigate these risks by decreasing the speed of tooth movement, reducing teeth coverage by aligners, and prolonging the wearing duration for each set of aligners. Thus, clear aligners are recommended for patients susceptible to gingivitis and/or periodontitis.Meanwhile, alveolar bone defect (fenestration and dehiscence) is also a common complication of orthodontic treatment. A recent study found that the incidence of fenestration in patients treated with clear aligner and fixed appliance was 23.96% and 26.18%, respectively.111 Another investigation also showed that non-extraction CAT was associated with increased presence of alveolar bone dehiscence and fenestration.112 Thus, root-bone relationship should be considered and evaluated carefully, especially arch expansion is designed.
|
||||
## Relapse
|
||||
After orthodontic treatment, relapse tends to occur because of incomplete remodeling of the periodontal tissues and muscular system. In the literature, relapse has been mainly linked to occlusal stability, types of tooth movement, root-bone relationships, and the balance of intraoral and extraoral muscle forces, with the type of orthodontic appliance used having minimal impact on relapse risk.113–115 The use of retainers and correction of oral bad habits (such as tongue-thrust swallowing, etc.) are currently considered the most effective measures for reducing relapse risk.
|
||||
## Conclusion and expectation
|
||||
The design of clear aligners continues to evolve, taking advantage of the novel materials and insights generated by global big data studies, leading to less difficulty in complex cases treatment, allowing more patients worldwide to achieve better treatment outcome by this technology. A novel clear aligner philosophy—biomechanics-guided, esthetics-driven, periodontium-supported and TMJ-compatible clear aligner therapy (BEPT-CAT)—may be applied in clinical practice to guide aligner treatment planning and execution. Moreover, the possibility of tiny attachments or attachment-free designs may become feasible, further improve patients’ comfort and esthetics during treatment. In the future, individual dental practices may be equipped with devices that allow to 3D-print the elements of the novel designs, further increasing treatment personalization.Advances in science and technology are driving progress in orthodontics. Esthetic, comfortable, convenient, and efficient orthodontic treatment will be realized through digitally oriented invisible aligner technology, bringing CAT into mainstream use.
|
||||
@@ -0,0 +1 @@
|
||||
[[1, "Paradoxical Intention (PI) Combined With Hypnosis in the Rapid Treatment of Anxiety Disorders: The Cases of \"Fran\" And \"Emily\"", "CBT"], [2, "Paradoxical Intention and Hypnosis for Anxiety Disorders: Cautious Promise and Considerations from a CBT Perspective", "CBT"], [3, "Paradoxical Intention: Everywhere and Nowhere All at Once", "CBT"], [4, "But Does It Work in Theory? and The Case of Simone: Paradoxical Intention in a Case of Post-Traumatic Panic Disorder", "CBT"], [5, "Answering the Call: Qualitative Analysis of an Exceptional Therapist Seeing the Mini-Cases of “Anne,” “Mel,” and “Susan”", "Other"], [6, "Short-Term Psychodynamic Psychotherapy (STPP) for Obsessive-Compulsive Disorder (OCD): The Hybrid Case of \"Serena\"", "CBT"], [7, "The Ambiguity of Being Alive: Turning an Existential Lens to the Case of \"Serena\"", "Psychodynamic"], [8, "Enhancing Manualized Short-Term Psychodynamic Treatment for OCD by Considering Developmental and Modern Structural Theories", "Psychodynamic"], [9, "Integrating Existentialism and Modern Structural Theory into Short-Term Psychodynamic Psychotherapy for OCD", "Psychodynamic"], [10, "Regulation Focused Psychotherapy for Children (RFP-C) with Externalizing Behaviors: Comparing the Successful Case of \"Jack,\" and the Unsuccessful Case of \"Oliver\"", "Other"], [11, "Insights from a Dual Case Study of Regulation Focused Psychotherapy for Children (RFP-C) with Externalizing Behaviors: The Cases of \"Jack\" and \"Oliver\"", "Other"], [12, "Comparing Parent Child Interaction Therapy (PCIT) to Regulation Focused Psychotherapy for Children (RFP-C) with Externalizing Behavior Problems: The Cases of \"Jack\" and \"Oliver\"", "Other"], [13, "Reflections on Methods, Therapeutic Alliance, and Possibilities for Psychotherapy Integration in the RFP-C Cases of \"Jack\" and \"Oliver\"", "Other"], [14, "Addressing Child Maltreatment by Infusing Multicultural, Feminist Tenets to Standard Clinical Approaches: The Cases of “Bashiir” and “Jaquann”", "Other"], [15, "Working with Siblings in the Treatment of Traumatized Youth", "Other"], [16, "An Ecological Exploration of Addressing Child Maltreatment", "Other"], [17, "Embracing Deliberate Practice and Cultural Humility to Deepen Our Understanding of the Multicultural Feminist Approach: The Cases of “Bashiir” and “Jaquann”", "Other"], [18, "\"The Commitment of a Lifetime\": The Role of Emotionally Focused Couple Therapy in Strengthening Attachment Bonds and Improving Relationship Health in Later-Life Couples—The Teletherapy Case of \"Alice\" and \"Steve\"", "EFT"], [19, "Emotionally Focused Couple Therapy with a Late-Life Couple: From Despair to Integrity", "EFT"], [20, "The Successful Integration of Emotionally Focused Couple Therapy (EFCT) and Multicultural Theory: Drew Mendelson’s Psychotherapy with \"Alice\" and \"Steve\"", "EFT"], [21, "Reflecting on the Themes of Aging, Caregiving, Narrative, and Multiculturalism in the EFCT Case of \"Alice\" and \"Steve\"'", "EFT"], [22, "The Many Reasons Why Not to Commit Suicide: The Case of \"Maggie\"", "Other"], [23, "Unifying Psychotherapy in Suicide Prevention", "Other"], [24, "The Practical Value of a Big-Picture, Metatheoretical, Unified Psychotherapy: Henriques' Unified Theory of Knowledge", "Other"], [25, "Summarizing and Clarifying the Unified Approach", "Other"], [26, "The Role of Exposure Therapy in Accelerated Experiential Dynamic Psychotherapy: The Case of \"Chris\"", "CBT"], [27, "Maximizing Exposure's Benefit: Making it Possible, Bearable and Fruitful", "AEDP"], [28, "The Case of \"Chris\" through a Principle-Based and Alliance-Focused Lens", "AEDP"], [29, "Additional Perspectives on the Case of \"Chris\"", "CBT"], [30, "Existential Psychotherapy in a Deep Cultural Context: The Case of “Keo”", "Other"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[271, "On Systematizing Theory-Building Case Studies", "Other"], [272, "The Logic of Case-Study Methodology", "Other"], [273, "The Logic of Theory and the Logic of Practice", "Other"], [274, "Evaluating the Philosophies of Theory-Building in Case Studies", "Other"], [275, "Logic, Hermeneutics, or Both?", "Other"], [276, "Individualizing Exposure Therapy for PTSD: The Case of Caroline", "Exposure Therapy"], [277, "Plan Analysis in Action", "CBT"], [278, "Manualized Psychotherapies in the \"Real World\"", "Other"], [279, "Prolonged Exposure (PE) for Treatment of Childhood Sexual Abuse-Related PTSD: Do We Need to Augment It?", "Other"], [280, "Between Manualized Treatments and Principle-Guided Psychotherapy: Illustration in the Case of Caroline", "Other"], [281, "The Case of Ms. Q: A Demonstration of Integrative Psychotherapy Guided by \"Core Clinical Hypotheses\"", "Integrative"], [282, "A Contribution to Psychotherapy Integration", "Integrative"], [283, "Issues in the Development, Practice, Training, and Research of Integrative Therapies", "Integrative"], [284, "\"A New Therapy for Each Patient\": Integrative Case Formulation and Treatment in the Case of Ms. Q", "Integrative"], [285, "Where Does the \"Core Clinical Hypotheses\" Model Fit Among Models of Integrative Psychotherapy?", "Integrative"], [286, "A Novel Group Therapeutic Format in Cognitive Behavioral Treatment for Clients with Social Phobia in a Training Setting: A Case Study of One Treatment Group with Nine Clients", "CBT"], [287, "Handling Multiple Levels of Data and Multiple Research Questions in an Embedded Case Study: Methodological Challenges", "CBT"], [288, "When Novice Therapists Meet Their First Patients: Reflections and Questions on Training in CBT", "CBT"], [289, "Further Reflections on the Therapy Training Program in Aarhus, and the Role of Case Studies in Psychotherapy Research", "CBT"], [290, "Deconstructing Demons: The Case of Geoffrey", "CBT"], [291, "Adapting Older Adults to Cognitive Behavior Therapy and Vice Versa: The Case of Geoffrey", "CBT"], [292, "New Wine in Old Bottles: The Transdiagnostic Model in the Case of Geoffrey", "CBT"], [293, "Balancing Between Empirically-Supported Methods and Individualized Treatment Design in the Case of Geoffrey", "CBT"], [294, "Targeting Catholic Rituals as Symptoms of Obsessive Compulsive Disorder: A Cognitive-Behavioral and Psychodynamic, Assimilative Integrationist Approach", "CBT"], [295, "On the Nature and Treatment of Scrupulosity", "CBT"], [296, "Treatment Paradigms in Psychology", "CBT"], [297, "Meaning and Pragmatism in OCD Treatment", "CBT"], [298, "An \"Incurable\" Schizophrenic: The Case of Mr. X", "Psychodynamic"], [299, "From \"Incurable\" Schizophrenic to Person in Recovery: A Not So Uncommon Story", "Psychodynamic"], [300, "Psychotherapy Can Be Helpful for Schizophrenics", "Psychodynamic"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[301, "Karon's Case of \"Mr. X\" and the \"International Society for the Psychological Treatments of Schizophrenia and Other Psychoses\" (ISPS)", "Psychodynamic"], [302, "Psychotherapy of Schizophrenia Works", "Psychodynamic"], [303, "Story of \"Hope\": Successful Treatment of Obsessive Compulsive Disorder", "CBT"], [304, "Systematic Evaluation to Improve the Quality of Patient Care: From Hope to Hopeful", "Other"], [305, "The Case of Hope: \"Evidence-Based Practice\" (EBT) in Action", "Other"], [306, "Evidence-Based Practice in the Treatment of OCD", "Other"], [307, "Integrating Cognitive-Behavioral and Cognitive-Interpersonal Case Formulations: A Case Study of a Chinese American Male", "CBT"], [308, "Considering Culture One Client at a Time: Maximizing the Cultural Exchange", "CBT"], [309, "Being Culturally Sensitive is Not the Same as Being Culturally Competent", "CBT"], [310, "Psychodynamic-Interpersonal Supervision of Liu's Case of TC", "Psychodynamic"], [311, "Teaching Clinical Competence", "Other"], [312, "Dynamic Sizing, Multidimensional Identities, & Clinical Supervision", "Other"], [313, "Empirically-Based Outpatient Treatment for a Patient at Risk for Suicide: The Case of \"John\"", "Other"], [314, "A Model Case of Suicide Intervention", "Other"], [315, "Integrating Treatments for Suicidal Patients into an Effective Package", "Integrative"], [316, "Applying Theory and Science to the Treatment of Suicide Risk", "Other"], [317, "Seeking an Equal Place at the Therapy Research Table: An Introduction to a Series on the Pragmatic Case Study Method", "Psychodynamic"], [318, "Collaborative Versus Adversarial Stances in Scientific Discourse: Implications for the Role of Systematic Case Studies in the Development of Evidence-Based Practice in Psychotherapy", "Other"], [319, "Generating and Generalizing Knowledge about Psychotherapy from Pragmatic Case Studies", "Other"], [320, "Psychoanalytic Case Studies and the Pragmatic Case Study Method", "Psychodynamic"], [321, "Two Babies in Two Bathtubs -- Don't Throw Out Either, But Rather Advance Both: Discussion of Edwards, Eells, and Messer Papers", "Other"], [322, "Finding Legitimacy for Case Study Knowledge: Introduction to a Trialogue in 4 Rounds", "Other"], [323, "Round 1: Does Case Study Knowledge Need a New Epistemology?", "Other"], [324, "Round 2A: Finding Objectivity and Causality in Pragmatism -- A Response to Held", "Other"], [325, "Round 2B: Facing Human Suffering -- A Response to Held", "Other"], [326, "Round 3: Regarding Objectivity and Causality -- A Rejoinder to Fishman and Miller", "Other"], [327, "Round 4A: Not a Knock-Out Punch, But Rather a Call For Pluralism -- A Further Reply to Held", "Other"], [328, "Round 4B: How Real Is Clinical Wisdom? A Further Reply to Held", "Other"], [329, "Pragmatic Case Studies and Evidence-Based Treatment: Research and Clinical Applications of a Computerized Outcomes Management System", "Other"], [330, "Empirical Evaluation of the Utility and Effectiveness of Clinically Flexible Application in Evidence-Based Treatments", "Other"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[331, "Technology to Support the Clinical Management of Psychotherapy Cases: Commentary on the Polaris-MH", "Other"], [332, "Practice-Based Evidence and Evidence-Based Practice: The Evidence for Outcomes Management", "Other"], [333, "Hypnosis in the Desensitization of Fears of Dying", "Hypnosis"], [334, "Two Cases, One Good Therapist", "CBT"], [335, "How Clinicians Learn to Integrate Hypnotic Tactics and Strategies into Psychotherapeutic Interventions", "Hypnosis"], [336, "Rapid Change and Clinical Empiricism", "Hypnosis"], [337, "Identifying and Targeting Idiosyncratic Cognitive Processes in Group Therapy for Social Phobia: The Case of Vumile", "CBT"], [338, "APPENDICES FOR Identifying and Targeting Idiosyncratic Cognitive Processes in Group Therapy for Social Phobia: The Case of Vumile", "CBT"], [339, "Evaluating Adherence and Flexibility in the Use of a Manual in Clinical Practice", "Other"], [340, "A Yeoman's Job in Developing, Refining, Revising, and Executing a Manualized Group Version of the Clark and Wells (1995) Model, Although More Remains To Be Done", "Other"], [341, "The Case Of Vumile: Breathing Life Into a Manual and Model", "Other"], [342, "How the Case of Vumile Contributes to the Evidence Base for Cognitive Therapy with Social Phobia as an Empirically Grounded Clinical Intervention", "CBT"], [343, "The Case of \"CG\": Balancing Supportive and Insight-Oriented, Psychodynamic Therapy with a Client Undergoing Intense Life Stresses", "Psychodynamic"], [344, "Placing Psychotherapy Case Studies within the Framework of the APA Evidence-Based Practice in Psychology (EBPP) Model", "Psychodynamic"], [345, "Adding Supporting Evidence and Eliminating Extraneous Bio-Medical Constructs from the Psychodynamic Case Study", "Psychodynamic"], [346, "The Roles of the EBPP Model and of Bio-Medical Approaches in Psychodynamic Therapy", "Psychodynamic"], [347, "Three American Troops in Iraq: Evaluation of a Brief Exposure Therapy Treatment", "Exposure Therapy"], [348, "Commentary -- Bringing Home the Psychological Immediacy of the Iraqi Battlefield", "Exposure Therapy"], [349, "Commentary -- Towards Formalizing a Very Promising Treatment", "CBT"], [350, "Response to Commentaries -- The Scientist-Practitioner on the Front Line: Development and Formalization of Evidenced-Based Interventions on the Battlefield", "Other"], [351, "The Case of \"Ben\": A Flexible, Holistic Application of Multimodal Therapy", "Integrative"], [352, "Editor's Introduction to PCSP - From Single Case to Database: A New Method for Enhancing Psychotherapy Practice", "CBT"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[31, "Musings on the Case of \"Keo\" From a Person-Centered Point of View, With a Focus on Therapist Responsiveness", "Humanistic"], [32, "Existential Psychotherapy in a Community Context: The Inspiring Case of \"Keo\"", "Humanistic"], [33, "Theoretical, Clinical, Practical, and Personal Reflections on the Case of \"Keo\"", "Humanistic"], [34, "Kelly’s Circle of Safety and Healing: An Extended Schema Therapy Narrative and Interpretative Investigation", "Schema Therapy"], [35, "The Reconstructive Play of Memory: Commentary on David Edwards’ Case Study of Schema Therapy", "Schema Therapy"], [36, "Applying the Schema Therapy Approach of Edwards’ Case of Kelly to Patients With Dissociative Identity Disorder (DID): The Cases of Susie and Anna", "Schema Therapy"], [37, "Parts of the Self, Schema Modes, Alters, and Narrative and Pre-Narrative Selves: Understanding and Working With Multiplicity", "Schema Therapy"], [38, "A Sequenced, Relationship-Based Approach to the Treatment of Complex Posttraumatic Stress Disorder (CPTSD): The Hybrid Case Study of \"Chloe\"", "AEDP"], [39, "Sequenced Relationship-Based Psychotherapy for Complex Posttraumatic Stress Disorder: Commentary on the Application of the Model to the Hybrid Case of \"Chloe\"", "Other"], [40, "Mentalization—A Uniting Thread in the Treatment of Complex Posttraumatic Stress Disorder (CPTSD): Commentary on Phoebe Shepard’s Case Study of \"Chloe\"]", "Psychodynamic"], [41, "Revisiting the Case of “Chloe”: Reflections on the Treatment of a Survivor of Complex Trauma", "Psychodynamic"], [42, "A Short-Term Training Clinic Model for Dialectical Behavior Therapy (DBT) in Treating Borderline Personality Disorder (BPD): The Case of \"Jane\"", "DBT"], [43, "Finding a Dialectical Balance Between Process and Procedure", "Other"], [44, "Secondary Targets Are Not So Secondary: Commentary on Michael Marks' Case Study of \"Jane\"", "Other"], [45, "The Many Layers of Complexity in DBT: Reconstructing a Crucial Theme in the Therapy of \"Jane\"", "DBT"], [46, "The Adjudicated Case Study Method, Part 2: Editor’s Introduction", "Other"], [47, "Further Developments in the Panel of Psychological Inquiry Method of Case Study Research: The Case of \"Ronan\"", "Other"], [48, "What Can We Learn About Therapeutic Change From Case History Data? The Research Jury Method with the Couple Case of \"Carl\" and \"Sandra\"", "Other"], [49, "Commentary—Extending the Boundaries of Systematic Case Study Research: Conceptual and Methodological Issues", "EFT"], [50, "Editor's Introduction: The Psychotherapy Case of \"Sharon\" -- A Comparative Analysis Using Contrasting Interpersonal Theories", "Exposure Therapy"], [51, "Goals and Design of the Project and Basic Information About Sharon’s Case", "Exposure Therapy"], [52, "The Case of Sharon Considered from the Vantage Point of Interpersonal Defense Theory", "Exposure Therapy"], [53, "The Case of Sharon Considered from the Vantage Point of Interpersonal Reconstructive Therapy", "Exposure Therapy"], [54, "Comparing Interpersonal Defense Theory and Interpersonal Reconstructive Therapy and Their Views of Sharon’s Case", "Exposure Therapy"], [55, "Interpersonal Wishes and Fears with Regard to Internalized Attachment Figures: Differing Focus of Two Case Formulation Methods that use SASB", "Exposure Therapy"], [56, "How Do We Decide Which of Two Case Formulations Is Correct? Commentary on Westerman and Critchfield et al.", "Exposure Therapy"], [57, "Philosophical Considerations and Research Ideas About Comparing the Two Approaches: Messer’s Comments Point the Way Forward", "Exposure Therapy"], [58, "Inflexibly Enacted Traditional Masculinity Norms (IE-TMNs) and Their Impact on Adolescent and Young Adult Depression: The Hybrid Case Study of \"Tommy\"", "Humanistic"], [59, "Understanding the Role of Inflexibly Enacted Masculinity Norms in Therapy: A Commentary on the Case of \"Tommy\"", "Exposure Therapy"], [60, "Reconstructing and/or Deconstructing Masculinity: A Commentary on the Case of \"Tommy\"", "Other"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[61, "Treating Masculinity: A Commentary on The Hybrid Case Study of \"Tommy\"", "Other"], [62, "Revisiting \"Tommy\": Further Considerations of Best Practices for Addressing Inflexibly Enacted Traditional Masculinity Norms (IE-TMNs) with Boys and Men in Therapy", "Other"], [63, "Portrait of a Man Imprisoned in an Altered State of Consciousness: The Case of \"Sean\"", "Other"], [64, "Virtual Realities: On Delusion, Shame, and Intersubjectivity", "CBT"], [65, "The Keys to the Prison: Michael Garrett's Integrative Approach to the Treatment of Psychosis", "CBT"], [66, "Phenomenological, Epistemological, and Integrative Perspectives on the Case of \"Sean\"", "Integrative"], [67, "Telephone-Based, Clinician-Guided Self-Help Cognitive Behavioral Therapy for Depression in Parkinson's Disease (dPD): The Responder Cases of \"Alice\" and \"Carl,\" and the Nonresponder Cases of \"Ethan\" and \"Gary\"", "CBT"], [68, "Individualizing Evidence-Based Treatment of Neuropsychiatrically Complex Patients: Process-Based Targets for Change in Parkinson’s Depression", "CBT"], [69, "Telemental Health During a Global Pandemic: Clinical Lessons from Guided Self-Help, Telephone Therapy Case Studies", "CBT"], [70, "Lessons Learned: Conducting Cases of Manualized, Telephone-Based, Cognitive Behavioral Treatment for Depression in Parkinson’s Disease (dPD)", "CBT"], [71, "Affect Phobia Therapy for Mild to Moderate Alcohol Use Disorder: The Cases of \"Carey,\" \"Michelle,\" and \"Mary\"", "Psychodynamic"], [72, "The Impact of Affect Phobia Therapy (APT) on Alcohol Use Disorders (AUD)—Evaluating Three Case Studies", "Psychodynamic"], [73, "The Quest for Causality in Psychotherapy Research", "Other"], [74, "Wanting Too Much and Too Soon – The Therapist´s Clinical Perspective", "Psychodynamic"], [75, "The Effect of Integrating Music Listening With an Attachment- And Affective-Focused Short-Term Psychotherapy in an Individual With Relational Trauma: The Case of \"James\"", "AEDP"], [76, "Integrating Client-Chosen Music in Relational Trauma Treatment: Pathways to the Heart", "Psychodynamic"], [77, "A Bridge Over Troubled Water: Commentary on Paul Blimling’s Case of \"James\" Integrating Music Listening into AEDP", "Psychodynamic"], [78, "Self-Selected Music for Relational Trauma: Commentary on the Psychotherapy Case of \"James\"", "Other"], [79, "Facing the Music: Further Thoughts on Integrating Music into Psychotherapy", "AEDP"], [80, "Adapting an Exposure and Response Prevention Manual To Treat Youth Obsessive-Compulsive Disorder and Comorbid Anxiety Disorder: The Case of \"Daniel\"", "CBT"], [81, "Forests and Trees: Commentary on the Case of \"Daniel\"", "CBT"], [82, "When Psychological Comorbidities Demand Flexibility: Treatment Adaptations for Youth Anxiety Disorders", "CBT"], [83, "The Case of \"Daniel\": Flexibly Delivering an Inherently Challenging Treatment in the Face of a Complex Presentation", "CBT"], [84, "In the Shadows: On Meta-Awareness and Spiraling Effects in Psychotherapy—Comment on Nicole Vigoda Gonzalez and Diana Fosha", "AEDP"], [85, "In the Light: On Meta-Experience and Spiraling Effects in Psychotherapy—Commentary on Louis Sass’s Commentary on Diana Fosha’s Commentary on Nicole Vigoda Gonzalez’s Case of \"Rosa\"", "AEDP"], [86, "Moment-to-Moment Guidance of Clinical Interventions by AEDP’s Healing-Oriented Transformational Phenomenology: Commentary on Vigoda Gonzalez’s (2018) Case of \"Rosa\"", "AEDP"], [87, "Introduction to Commentaries on Sociocultural Identity, Trauma Treatment, and AEDP Through the Lens of Bilingualism in the Case of “Rosa”", "AEDP"], [88, "The Case of \"Rosa\": Exploring Socio-Cultural Identities in Treatment", "Other"], [89, "The Case of “Rosa”: The Importance of Specificity in Our Quest to Integrate Cultural Competence in Practice", "Psychodynamic"], [90, "The Case of “Rosa”: AEDP in the Realm of Cultural Diversity—One's New Language as a Vehicle for Exploring New Aspects of Identity", "AEDP"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[91, "The Merits of Integrating Accelerated Experiential Dynamic Psychotherapy and Cultural Competence Strategies in the Treatment of Relational Trauma: The Case of \"Rosa\"", "Psychodynamic"], [92, "Case Studies in Accelerated Experiential Dynamic Psychotherapy (AEDP):Reflections on the Case of \"Rosa\"", "Psychodynamic"], [93, "AEDP and Cultural Competence in Developmental Trauma Treatment", "Psychodynamic"], [94, "The Case of \"Rosa\": Reflections on the Treatment of a Survivor of Relational Trauma", "Psychodynamic"], [95, "Metaphoric Tasks in Psychotherapy: Case Studies of \"Margie's\" Self-Image and \"Amy's\" Pain", "Hypnosis"], [96, "When Skill and Wisdom Merge", "Other"], [97, "Metaphor, Verstehen or Neither: A Reflection on Hypnotic Analgesia and Active Ingredients in Psychotherapy", "CBT"], [98, "What Are Case Studies Good For? A Response to Commentaries by McMullen and Karlin", "Other"], [99, "Maria and Andrea: Comparing Positive and Negative Outcome Cases in an Online, Clinician-Guided, Self-Help Intervention for Panic Disorder", "CBT"], [100, "Daydreamer and Night Owl: Comparing Positive and Negative Outcome Cases in an Online, Clinician-Guided, Self-Help Intervention for Social Anxiety Disorder", "CBT"], [101, "Why Do Some Psychotherapy Clients Get Better Than Others?", "CBT"], [102, "Case Studies of Clinician-Guided, Online Therapy: Towards a Fuller Understanding of How and Under What Conditions Such Therapy Works", "Other"], [103, "Strengths and Limitations of Internet-Based Cognitive-Behavioral Treatments for Anxiety Disorders", "CBT"], [104, "Written Exposure Therapy as Step One in Reducing the Burden of PTSD: The Composite Cases of \"Alex,\" \"Bruno,\" and \"Charles\"", "Exposure Therapy"], [105, "Stepped-Care Approaches to Posttraumatic Stress Disorder: Sharpening Tools for the Clinician", "Exposure Therapy"], [106, "On the Implementation of Written Exposure Therapy (WET) with Veterans Diagnosed with PTSD", "Exposure Therapy"], [107, "Beyond Binary Thinking: Providing Best Practice Treatment to Veterans with PTSD", "Exposure Therapy"], [108, "The Case of \"Hiro\": Treating Tourette Syndrome by Comprehensive Behavioral Intervention for Tics (CBIT)", "CBT"], [109, "On Protocols and Principles in the Case of Hiro", "CBT"], [110, "From Cook to Culinarian: Going Beyond the Manual When Delivering Behavior Therapy to Treat Tourette Disorder", "CBT"], [111, "Perspectives on Training Clinicians to Effectively Implement Evidence-based Treatment for Tourette Syndrome", "CBT"], [112, "Mechanical/Algorithmic Versus Flexible/Creative Clinical Practice: How Underlying Principles Bridge the Gap", "CBT"], [113, "Integrating Time-Limited Dynamic Psychotherapy and a Buddhism-Inspired Aversion/Attachment Model of Client Suffering: The Cases of \"Beth\" and \"Amy\"", "Mindfulness"], [114, "On How Psychotherapy Can Be Helpfully Integrated Into Mindfulness Practice", "Mindfulness"], [115, "A TLDP Therapist Meets the Buddha on a Road and No One Is Killed", "Mindfulness"], [116, "On the Skillful Integration of Buddhist Psychology and Short-Term Dynamic Psychotherapy", "Mindfulness"], [117, "A Life-Saving Therapy: The Theory-Building Case of \"Cora\"", "Exposure Therapy"], [118, "The Life-Saving Case of \"Cora\": A Rogerian Perspective", "Humanistic"], [119, "The Case of \"Cora\": Clinical and Methodological Perspectives", "Other"], [120, "Considering \"Cora\"", "Other"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[121, "Conceptualizing the Complexity of Change in Psychotherapy: The Case of \"Cora\"", "Other"], [122, "The Impact of Implementing an \"Incredible Years\" Group Within a Family Living Unit in a Transitional Living Shelter: The Case of \"Cathy\"", "ACT"], [123, "Integrating Early Childhood Mental Health and Trauma-Informed Care for Homeless Families With Young Children", "Other"], [124, "Considerations for the Dissemination of Incredible Years in Welfare Systems: Implications of the Case of \"Cathy\" for Intervention in the Foster Care System", "Other"], [125, "Further Consideration of Systems, Stigma, Trauma, and Access to Care", "Other"], [126, "Getting into the ACT with Psychoanalytic Therapy: The Case of \"Daniel\"", "CBT"], [127, "Promoting Psychological Flexibility by Practicing Flexibly: The Therapist as Model", "Psychodynamic"], [128, "A Cognitive-Behavioral Perspective on Robert Cohen's Case of \"Daniel\"", "CBT"], [129, "Expanding My Perspective on the Case of Daniel", "CBT"], [130, "Introduction to Case Study Special Issue -- Case Studies in Japan: Two Methods, Two Worldviews, Part 2", "Other"], [131, "Narrative Case Studies and Practice-Based Learning: Reflections on the Case of \"Mr. R\"", "Other"], [132, "Discontinuous Change Facilitated by Emotional Expression Through Drawing and the Accurate Verbal Responsiveness of the Therapist", "Other"], [133, "On Reading Dr. Kumano's and Dr. McLeod's Commentaries", "Integrative"], [134, "Examining the ACT Model in the Case Study of Taro", "ACT"], [135, "The Role of Context in the Case of Taro", "ACT"], [136, "Acceptance and Commitment Therapy is \"Haruki Murakami\"", "ACT"], [137, "事例研究特集号——はじめに 日本における事例研究:2つの方法,2つの世界観 Part2", "Other"], [138, "ナラティブ事例研究と実践を基礎とした学び: R氏のケースの省察", "Other"], [139, "描画による感情表現と正しい言葉による対応がもたらす非連続的変化", "Other"], [140, "熊野先生とマクレオッド先生のコメントを読んで", "Other"], [141, "事例研究によるACTモデルの検討", "ACT"], [142, "太郎の事例における文脈の役割", "Other"], [143, "アクセプタンス&コミットメント・セラピーは 「村上春樹」である", "Other"], [144, "Sudden Gains and Sudden Losses in the Clients of a \"Supershrink\": 10 Case Studies", "Exposure Therapy"], [145, "Rapid Recovery with an Effective Therapist: A Comment on Hansen, Lambert, and Vlass", "Other"], [146, "An Exceptional, Efficient, and Resilient Therapist: A Case Study in Practice-Based Evidence", "Other"], [147, "Calling for More Case Studies of Exceptional and Efficient Psychotherapists", "Other"], [148, "Introduction to Case Study Special Issue-- Case Studies in Japan: Two Methods, Two Worldviews", "Other"], [149, "The Art of Communication Through Drawing: The Case of \"Mr. R,\" a Young Man Professing Misanthropy While Longing for Connection With Others", "Integrative"], [150, "Acceptance and Commitment Therapy for \"Taro,\" a Japanese Client with Chronic Depression: A Replicated Treatment-Evaluation", "ACT"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[151, "事例研究特集号¯はじめに 日本における事例研究:2つの方法,2つの世界観", "Other"], [152, "描画を通したコミュニケーション: 人間不信を標榜しながらも, 他者とのつながりを希求する青年R氏の事例", "Other"], [153, "慢性化したうつを抱えた日本人クライエント「太郎」に対する アクセプタンス&コミットメント・セラピー: トリートメント評価による再現可能性検証", "Other"], [154, "Using Client-Centered Psychotherapy Embedded Within A Pluralistic Integrative Approach to Help a Client With Executive Dysfunction: The Case of \"Judith\"", "Humanistic"], [155, "Providing Psychotherapy to People with Neuropsychological Impairment: Complexities and Issues Raised by the Case of \"Judith\"", "Humanistic"], [156, "Perspectives on the Case of \"Judith\"", "Other"], [157, "The Case of \"Judith\": A Neuropsychologist's Perspective", "Other"], [158, "The Case of \"Judith\": Reflections on Combining a Psychoneurological Perspective Within a Client-Centered and Pluralistic Therapy Framework", "Humanistic"], [159, "Pseudohallucinations in an Adolescent: Considerations for Diagnosis and Treatment in the Case of \"Kate\"", "Other"], [160, "Using Phenomenology To Understand Hallucinatory Experiences", "Other"], [161, "The Case of \"Kate\" and Her Pseudohallucinations from the Perspective of Interpersonal Defense Theory: An Example of Using Case Formulations as the Key Guide for Understanding Patients' Problems and Making Treatment Decisions", "CBT"], [162, "What Do We Know About the Correlates and Underlying Causes of Auditory Hallucinations in Nonpsychotic Children and Adolescents, and What Are the Implications for Diagnosis and Treatment?", "Other"], [163, "A Reconceptualization of Pseudohallucinations in the Case of \"Kate\"", "Other"], [164, "Trauma Treatment in Young Children with Developmental Disabilities: Applications of the Child-Parent Psychotherapy (CPP) Model to the Cases of \"James\" and \"Juan\"", "Other"], [165, "Clinical Considerations for Conducting Child-Parent Psychotherapy with Young Children with Developmental Disabilities Who Have Experienced Trauma", "ACT"], [166, "Child-Parent Psychotherapy in the Context of the Developmental Disability and Medical Service Systems", "Other"], [167, "Targeting Sexual Stigma: The Hybrid Case Study of \"Adam\"", "CBT"], [168, "The Hybrid Case Study of \"Adam\": Perspectives from Behavioral Activation and the Influence of Heteronormativity on LGB-Affirmative Therapy", "Other"], [169, "Toward Formulating Evidence-Based Principles of LGB-Affirmative Psychotherapy", "CBT"], [170, "Clinical Considerations in Working with Clients in the Coming Out Process", "Other"], [171, "The Case of \"Adam\": Reflections and Future Directions", "CBT"], [172, "The Case of \"Sonia\": Psychotherapy With a Complex, Difficult Patient Grounded in the Integrated Psychotherapy Model of Hector Fernandez-Alvarez", "Other"], [173, "The Case of \"Sonia\" Through the Lens of Dialectical Behavior Therapy", "DBT"], [174, "Complex and Difficult Clinical Patients: Reflections on Fernández-Álvarez's Integrative Psychotherapy Model as Applied to the Case of \"Sonia\"", "Integrative"], [175, "Increasing the Rigor of Case Study Evidence in Therapy Research", "Other"], [176, "The Pragmatic Case Study Method for Creating Rigorous and Systematic, Practitioner-Friendly Research", "Other"], [177, "The Case Formulation Approach to Psychotherapy Research Revisited", "Other"], [178, "Who Needs a Case Formulation and Why: Clinicians Use the Case Formulation to Guide Decision-Making", "Other"], [179, "In Support of Evidence-Based Case Formulation in Psychotherapy (From the Perspective of a Clinician)", "Other"], [180, "Sara, A Social Phobia Client with Sudden Change After Exposure Exercises in Intensive Cognitive-Behavior Group Therapy: A Case-Based Analysis of Mechanisms of Change", "CBT"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[181, "Advances and Controversies in the Application of a Modified Version of Cognitive Behavior Therapy for Social Anxiety Disorder", "CBT"], [182, "Further Reflections on the Complexities of Therapeutic Change Mechanisms in a Case Study of Social Phobia", "CBT"], [183, "\"Cool Kids\" in Denmark: Commentary on a Cognitive-Behavioral Therapy Group for Anxious Youth", "CBT"], [184, "\"Cool Kids\" in Denmark: Continuing Reflections on a Cognitive-Behavioral Therapy Group for Anxious Youth", "CBT"], [185, "Synergy Among Research, Practice, and Training in Psychotherapy: An Introduction to the Work of Mikael Thastum and His Students at Aarhus University, Denmark", "CBT"], [186, "The Anxiety Disorders Clinic for Children and Adolescents (TADCCA) at Aarhus University in Denmark", "CBT"], [187, "A \"Cool Kids\" Cognitive-Behavioral Therapy Group for Youth with Anxiety Disorders: Part 1, The Case of Erik", "CBT"], [188, "A \"Cool Kids\" Cognitive-Behavioral Therapy Group for Youth with Anxiety Disorders: Part 2, Analysis of the Process and Outcome of Responders Versus Nonresponders", "CBT"], [189, "Treating a Mother's Accommodation Behaviors of Her Adult Son's OCD: The Case of \"Brianne\" and \"Charlie\"", "CBT"], [190, "Treatment Refusal and Family Accommodation", "Other"], [191, "Values-Focused Exposure and Response Prevention in the Treatment of Comorbid Schizophrenia and Obsessive-Compulsive Disorder: The Case of \"Mr. H\"", "CBT"], [192, "\"Functional,\" Sub-Clinical Obsessive-Compulsive Symptoms and Their Challenges: The Case of \"Angela\"", "CBT"], [193, "Considerations for Modifying Exposure and Response Prevention: The Cases of Mr. H and Angela", "Exposure Therapy"], [194, "Editor's Introduction: Combining Pragmatic Case Studies Within a Single Case Experimental Design", "Exposure Therapy"], [195, "Exposure and Response Prevention in the Treatment of Body Dysmorphic Disorder: A Case Series", "Exposure Therapy"], [196, "\"Selling\" Exposure Therapy", "Exposure Therapy"], [197, "Exposure Therapy -- What Is It That We Are Selling?", "Exposure Therapy"], [198, "The Management of Narcissistic Vulnerability: Three Case Studies Guided by Stephen Mitchell's Integrated Treatment Model", "Other"], [199, "On Tone, Play, and Healing: Commentary on Riordan's Case Studies", "Other"], [200, "The Many Complexities in Treating and Studying Narcissism", "Other"], [201, "A Personal Perspective on the Treatment of Three Cases of Narcissistic Vulnerability", "Other"], [202, "Combining Expressive Writing with an Affect- and Attachment-Focused Psychotherapeutic Approach in the Treatment of a Single-Incident Trauma Survivor: The Case of \"Grace\"", "AEDP"], [203, "Assimilative and Theoretical Integration in the Treatment of a Trauma Survivor", "Other"], [204, "Assimilative Integration in the Treatment of Trauma", "AEDP"], [205, "The Case of \"Grace\"-- A Commentary", "Other"], [206, "The Case of Grace: Strategic Rationales Underlying the Therapy Process", "AEDP"], [207, "Psychotherapy as a Human Science: Clinical Case Studies Exploring the Abyss of Madness", "Psychodynamic"], [208, "Empathy and Otherness: Humanistic and Phenomenological Approaches to Psychotherapy of Severe Mental Illness", "Humanistic"], [209, "The Humanity of the Psychotic Patient and the Human Approach by the Therapist: A Relational and Intersubjective Meeting", "Other"], [210, "The Abyss of Madness and Human Understanding", "Psychodynamic"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[211, "A Key Role for Case Studies: Theory Building", "Exposure Therapy"], [212, "Theory Development via Single Cases: A Case Study of the Therapeutic Relationship in Psychodynamic Therapy", "Psychodynamic"], [213, "Defenses in Interpersonal Interaction: Using a Theory-Building Case Study to Develop and Validate the Theory of Interpersonal Defense", "Exposure Therapy"], [214, "A Case Study Investigating Whether the Process of Resolving Interpersonal Problems in Couple Therapy Is Isomorphic to the Process of Resolving Problems in Individual Therapy", "Exposure Therapy"], [215, "Employing a Case Study in Building an Assimilation Theory Account of Generalized Anxiety Disorder and Its Treatment with Cognitive-Behavioral Therapy", "CBT"], [216, "A Strengths-Based, Skill-Building, Integrative Approach to Treating Conduct Problems in a 12-Year-Old Boy: Rafael's Story", "Integrative"], [217, "A Case of Rejection, Redemption, and Resilience: Commentary on the Case of Rafael", "CBT"], [218, "Developmental Perspectives on the Treatment of Childhood Conduct Problems", "Other"], [219, "Practice-Based Evidence on the Treatment of Conduct Problems in a Child/Adolescent", "Other"], [220, "The \"Individual-Case-Comparison\" Method for Systematically Comparing Good-Outcome and Poor-Outcome RCT Clients: Editor's Introduction", "Other"], [221, "Contrasting Clients in Dialectical Behavior Therapy for Borderline Personality Disorder: \"Marie\" and \"Dean,\" Two Cases with Different Alliance Trajectories & Outcomes", "DBT"], [222, "Contrasting Two Clients in Emotion-Focused Therapy for Depression 1: The Case of \"Tom,\" \"Trapped in the Tunnel\"", "CBT"], [223, "Contrasting Two Clients in Emotion-Focused Therapy for Depression 2: The Case of \"Eloise,\" \"It's Like Opening the Windows and Letting the Fresh Air Come In\"", "EFT"], [224, "Extending Systematic Case Study Method: Generating and Testing Hypotheses About Therapeutic Factors Through Comparisons of Successful and Unsuccessful Cases", "DBT"], [225, "A Promising Strategy for Critically Evaluating Case Studies: Introduction to an Issue on the Adjudicated Case Study Method", "Other"], [226, "Real Clinical Trials (RCT') -- Panels of Psychological Inquiry for Transforming Anecdotal Data into Clinical Facts and Validated Judgments: Introduction to a Pilot Test with the Case of \"Anna\"", "Other"], [227, "Seeing Beyond the Scars: A Testament to \"Anna\"", "Psychodynamic"], [228, "Subjected to Proof: The Advocate's Perspective", "Other"], [229, "\"Anna\" and the Panel of Psychological Inquiry: The Critic's Perspective", "Other"], [230, "Panel of Psychological Inquiry: The Therapist’s Perspective", "Psychodynamic"], [231, "Findings of the Panel of Psychological Inquiry Convened at Saint Michael’s College, May 13, 2008: The Case of \"Anna\"", "Other"], [232, "The \"Research Jury Method\": The Application of the Jury Trial Model to Evaluating the Validity of Descriptive and Causal Statements about Psychotherapy Process and Outcome", "Other"], [233, "Developing a Systematic Framework for Utilizing Discrete Types of Qualitative Data as Therapy Research Evidence", "Other"], [234, "A Diary-Based, Cross-Contextual Case Study Methodology: Background for the Case of \"Jane and Joe\"", "Other"], [235, "The Case of \"Jane and Joe\": A Diary-Based, Cross-Contextual Case Study", "Other"], [236, "Developing the Adjudicated Case Study Method", "Other"], [237, "Editor's Introduction to Issue on Case Formulation and Therapist Responsiveness", "Other"], [238, "The Unfolding Case Formulation: The Interplay of Description and Inference", "CBT"], [239, "Using Systematic Case Studies to Investigate Therapist Responsiveness: Examples from a Case Series of PTSD Treatments", "CBT"], [240, "Languages of Science and the Problem of Applied Clinical Knowledge: A Mixed Methods Appraisal of Eells' Case Formulation Research", "Exposure Therapy"]]
|
||||
@@ -0,0 +1 @@
|
||||
[[241, "Case Studies Help Us Read Between the Lines of Manual-Driven Therapy", "Other"], [242, "Evaluating Case Formulation Decision-Making and Therapist Responsiveness: A Perspective from the Area of Behavioral Assessment and Case Formulation", "Other"], [243, "Pragmatic Clinical Research to Inform the Field of Men's Mental Health: A Commentary on and Extension of Papers by David Edwards and Tracy Eells", "Other"], [244, "Treating Posttraumatic Stress Disorder in South Africa: An Integrative Model Grounded in Case-Based Research", "Integrative"], [245, "The Assessment and Treatment of Post-Abortion Syndrome: A Systematic Case Study From Southern Africa", "Other"], [246, "Trauma, Imagery and the Therapeutic Relationship: Langu's story", "CBT"], [247, "What Services and Supports Are Needed to Enable Trauma Survivors to Rebuild Their Lives? Implications of a Systematic Case Study of Cognitive Therapy With a Township Adolescent Girl With PTSD Following Rape", "CBT"], [248, "Autobiographical Memory Narratives in Psychotherapy: A Coding System Applied to the Case of Cynthia", "Other"], [249, "Rising to the Challenges of Identifying and Analyzing Clients' Narratives", "Other"], [250, "Developing a Systematic Procedure for the Assessment of Self-Defining Memories in Psychodynamic Therapy: Promise and Pitfalls", "Psychodynamic"], [251, "Toward The Scientific Study of Autobiographical Memory Narratives in Psychotherapy", "Other"], [252, "The Persecuting God and the Crucified Self: The Case of Olav and the Transformation of His Pathological Self-Image", "Other"], [253, "The Role of Religion and Spirituality in Olav's Treatment and Recovery: Commentary on an Exemplary Case Report", "Psychodynamic"], [254, "Psychotherapeutic Change and Spiritual Transformation: The Interaction Effect", "Psychodynamic"], [255, "Dissolution of \"The Committee\": Mentalization and Psychic Transformation in the Case Of Olav", "Psychodynamic"], [256, "Reflections on Olav's Therapy: The Roles of Religious Experience, Self Psychology, and Mentalization", "Other"], [257, "\"Back to the Future\": Narrative Treatment for Post-Traumatic, Acute Stress Disorder in the Case of Paramedic Mr. G", "Narrative Therapy"], [258, "\"Back to the Future\" Therapy: Its Present Relevance, Promise, and Implications", "Other"], [259, "Acute Stress Disorder and Forms of Narrative Disruption", "Narrative Therapy"], [260, "Prepared and Still Surprised", "Narrative Therapy"], [261, "The Case of Felix: An Example of Gay-Affirmative, Cognitive-Behavioral Therapy", "CBT"], [262, "Capturing (and Communicating) Complexity: Adapting CBT for Clients with Multiple Diversity", "CBT"], [263, "The Use of Cognitive-Behavioral Therapy to Promote Authenticity", "CBT"], [264, "Key Facets in Felix's Case: The Therapist's Cultural Competency, Masculine Socialization, and Sexual Orientation Stigma", "CBT"], [265, "Using Case Studies to Develop Theory: Roadmap to a Dialogue", "Exposure Therapy"], [266, "Logical Operations in Theory-Building Case Studies", "Other"], [267, "Lurching Toward Theory: The Case of Case Study Research in Conflict Mediation", "Other"], [268, "Forensic Evaluations Advance Scientific Theory: Assessing Causation of Harm", "Other"], [269, "What Can We Learn from Case Studies? More than Most Psychologists Realize", "Other"], [270, "Case Studies and Non-Abstractionist Theorizing", "Other"]]
|
||||
@@ -0,0 +1,111 @@
|
||||
# 이미지 소스 후보 조사 (2026-05-15)
|
||||
|
||||
현재 9개 소스로 4809 term 중 329개(6.8%) 매핑. 0% 카테고리는 치과마취학·치과
|
||||
생체재료학. 추가 소스 6개를 조사·실측한 결과를 정리한다.
|
||||
|
||||
## 비교 요약
|
||||
|
||||
| 후보 | 통합 비용 | 예상 수율 | 라이선스 안전 | 0% 카테고리 도움 | 종합 |
|
||||
|---|---|---|---|---|---|
|
||||
| NLM Open-i | 낮음 | **높음** | 높음 (PMC OA) | 부분 | **★★★★★** |
|
||||
| Tufts Dental | 낮음 (1회 요청) | 중 | 높음 (CC-BY) | 영상의학만 | **★★★★** |
|
||||
| Wellcome Collection | 낮음 | 낮음 | 중 (per-image) | 해부만 | ★★★ |
|
||||
| Kaggle 타깃 | 낮음 | 중 | 데이터셋별 | 보철 X선만 | ★★★ |
|
||||
| figshare | 중 | **불확실** | 필터 가능 | 불확실 | ★★ |
|
||||
| NCBI Bookshelf | 중-높음 | 중 | **NC-ND 다수** | 마취 일부 | ★★ |
|
||||
|
||||
## 1. NLM Open-i — **1순위**
|
||||
|
||||
- **엔드포인트**: `https://openi.nlm.nih.gov/api/search?query=<term>&m=<start>&n=<count>` (인증 불필요)
|
||||
- **규모**: 370만 이미지 / 120만 PMC 기사 + 7,400 흉부 X선 + NLM History 67,500 + MedPix
|
||||
- **실측 수율**: "periodontitis" 검색 → **7,588 hits**. 한 query당 결과 풍부.
|
||||
- **응답 필드**: `uid, pmcid, pmid, title, journal_title, authors, MeSH terms (major/minor), Outcome 점수, image URL`
|
||||
- **이미지 URL 패턴**: `https://openi.nlm.nih.gov/imgs/{100|137|150|512}/{id}/{pmcid}/PMC{pmcid}_{imgid}.png`
|
||||
- **라이선스**: PMC Open Access 기반 (CC-BY/CC0 등), 출처 표기로 재사용 가능
|
||||
- **현 `map_pmc_oa` 대비 우위**:
|
||||
- **Figure-level 색인** (현재는 article HTML 스크레이프해서 그림 추출 → 노이즈 많음)
|
||||
- **MeSH terms 포함** → 한글 용어 매핑에 도움 (영문 → MeSH 매칭 후 검색)
|
||||
- **유사 이미지 검색** (`similarInCollection`)
|
||||
- PMC와 같은 풀이지만 색인 품질 우수
|
||||
- **통합 비용**: `workflow_images.py`에 `map_openi(conn, max_terms, delay)` 함수 1개 추가. 기존 `verify_updates` 게이트 그대로 통과 가능. **약 2시간 작업**.
|
||||
|
||||
## 2. Tufts Dental Database — **2순위**
|
||||
|
||||
- **URL**: https://tdd.ece.tufts.edu/
|
||||
- **규모**: 파노라마 X선 **1,000장**, 전문가의 abnormality 레이블 + 치아 번호 주석 (multimodal)
|
||||
- **라이선스**: **Creative Commons Attribution 4.0** — 재배포·재사용 OK
|
||||
- **접근**: 웹사이트에서 **접근 요청 폼** 작성 (즉시 다운로드 X)
|
||||
- **적합 카테고리**: 구강악안면영상의학 (현재 13.9%, 추가 보강 가능). 주석이 있어 단순 X선보다 매핑 가치 큼.
|
||||
- **통합 비용**: 다운로드 후 로컬 매핑 (기존 kaggle 패턴 동일). **30분 + 접근 승인 대기**.
|
||||
- **주의**: 이미 영상의학은 비교적 잘 채워진 편 → ROI는 Open-i보다 낮음.
|
||||
|
||||
## 3. Wellcome Collection — **4순위**
|
||||
|
||||
- **엔드포인트**: `https://api.wellcomecollection.org/catalogue/v2/images?query=<term>&pageSize=N` (인증 불필요)
|
||||
- **실측 수율**: "periodontitis" → **단 7개**. 임상 용어엔 낮음.
|
||||
- **응답**: IIIF URL, 작품 metadata, 이미지별 라이선스 (CC BY 4.0 / "In copyright" 혼재)
|
||||
- **이미지 URL**: `https://iiif.wellcomecollection.org/image/{id}/info.json` (IIIF Image API)
|
||||
- **라이선스**: per-image — 필터링 로직 필요
|
||||
- **적합 카테고리**: 해부·역사적 일러스트 (기초치의학 일부) — 임상·방사선엔 부적합
|
||||
- **통합 비용**: 낮음, 하지만 **수율 대비 가치 낮음**
|
||||
|
||||
## 4. Kaggle 추가 타깃 데이터셋
|
||||
|
||||
검색 결과 (보철·임플란트 관련):
|
||||
- **Dental Implant Dataset (Mendeley `x4gr6mmwy4`)**: 5,273 파노라마 X선, Endosteal/Transosteal/Subperiosteal/Zygomatic 4종 분류
|
||||
- **Prosthesis detection 데이터셋** (Nature Sci Rep 2021): 2,235 파노라마, 크라운/브릿지/임플란트
|
||||
- 기타: Dental Cavity Detection, Panoramic Dental Xray TFRecords
|
||||
|
||||
**한계**: 대부분 **파노라마 X선**, 직접적인 크라운·틀니 임상 사진은 드묾. 보철(1.0%) 카테고리의 임상 사진 수요엔 부분적 해결.
|
||||
|
||||
- **통합 비용**: 다운로드 + 기존 kaggle 패턴 적용 (각 1-2시간)
|
||||
- **라이선스**: 데이터셋별 확인 필요
|
||||
|
||||
## 5. figshare API — 보류
|
||||
|
||||
- **엔드포인트**: `https://api.figshare.com/v2/articles?search_for=<term>` (인증 불필요)
|
||||
- **라이선스 필터**: `:licence:CCBY` 지원
|
||||
- **레이트 리미트**: ≤1 req/s 권장
|
||||
- **실측 결과**: "dental caries" 검색 → **무관한 결과 다수** (수질, 호텔 추천, 게놈 등). 검색 색인 품질이 의심스러움.
|
||||
- **결론**: 통합 전에 **검색 query 형식·필터링 추가 조사 필요**. 현 단계에선 우선순위 낮음.
|
||||
|
||||
## 6. NCBI Bookshelf — 보류
|
||||
|
||||
- **접근**: `https://www.ncbi.nlm.nih.gov/books/` + LitArch FTP for bulk
|
||||
- **콘텐츠**: StatPearls(2026), 치과마취·구강외과 chapter들 다수
|
||||
- **라이선스**: **CC-BY-NC-ND가 다수** — Non-Commercial + No-Derivatives → DB에 그림 URL 임베드 가능하나 변형/상업적 재사용 금지. SmallClaw 용도에 따라 적합 여부 갈림.
|
||||
- **적합 카테고리**: 치과마취학(0%) 추상 개념 (작용 기전 도식 등)
|
||||
- **통합 비용**: Bookshelf XML 파싱·그림 추출 로직 필요 (PMC와 다른 포맷)
|
||||
- **결론**: NC-ND 비율 확인 + 라이선스 정책 결정 후 진행
|
||||
|
||||
## 핵심 인사이트
|
||||
|
||||
1. **0% 카테고리(치과마취학·치과생체재료학) 매핑은 본질적으로 어려움**
|
||||
- "전도마취", "법랑질-상아질 접합부 미세구조" 같은 추상·미시 개념
|
||||
- 이미지로 직접 표현 가능한 비율이 낮음 — 어떤 소스로도 한계 존재
|
||||
- **현실적 목표**: 0% → 10~20% 정도
|
||||
|
||||
2. **수율은 Open-i > Kaggle > Wellcome 순**
|
||||
- Open-i 하나로 수백 term 추가 매핑 기대 (수율 추정 30-50%)
|
||||
- 나머지는 보조 역할
|
||||
|
||||
3. **검증 게이트(qwen3.5)가 노이즈를 잡아주므로** 양 우선 소스 추가 후 verify로 거르는 전략이 효율적
|
||||
|
||||
## 추천 진행 순서
|
||||
|
||||
1. **Open-i 통합** (2시간) — 즉시 착수 가능, ROI 최대
|
||||
2. **`add-images --source openi --max-openi 500` 후 `verify --fix`** — 결과 평가
|
||||
3. **Tufts Dental 접근 요청** — 영상의학 보강용, 승인 대기 동안 1단계 진행
|
||||
4. **Kaggle 보철·임플란트 데이터셋 평가** — 다운로드 후 효용 확인
|
||||
5. **Wellcome Collection** — 시간 여유 있으면 추가
|
||||
6. **figshare / Bookshelf** — 별도 라이선스·검색 품질 조사 후 결정
|
||||
|
||||
## 출처
|
||||
|
||||
- [NLM Open-i FAQ](https://openi.nlm.nih.gov/faq) — API 안내
|
||||
- [Open-i (data.gov)](https://catalog.data.gov/dataset/open-i) — 데이터셋 메타
|
||||
- [Wellcome Collection Developers](https://developers.wellcomecollection.org/) — Catalogue + IIIF API
|
||||
- [Tufts Dental Database](https://tdd.ece.tufts.edu/) — 접근 요청
|
||||
- [NIDCR DDSHub](https://www.ddshub.nih.gov/data-sources/head-neck-imaging-data) — Tufts 메타
|
||||
- [figshare API docs](https://docs.figshare.com/) — Search/license/files
|
||||
- [NCBI Bookshelf - Information for Authors and Publishers](https://www.ncbi.nlm.nih.gov/books/NBK554841/) — 라이선스
|
||||
@@ -0,0 +1,160 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Download remote images to local storage and update DB image_url.
|
||||
|
||||
Usage:
|
||||
python3 download_images.py [--limit N] [--category CAT] [--dry-run]
|
||||
|
||||
Downloads images from openi.nlm.nih.gov / cdn.ncbi.nlm.nih.gov to
|
||||
dental_images/remote/<term_id>.<ext> and updates image_url to the
|
||||
gateway path /api/files/uploads/dental_images/remote/<term_id>.<ext>.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sqlite3
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
import time
|
||||
import sys
|
||||
|
||||
from config import DB_PATH, IMG_BASE
|
||||
|
||||
REMOTE_DIR = os.path.join(IMG_BASE, "remote")
|
||||
URL_PREFIX = "/api/files/uploads/dental_images/remote"
|
||||
|
||||
|
||||
def localize_image(conn, term_id, url, korean=None, log_prefix=" "):
|
||||
"""Download one remote image to local and update DB. Returns new local URL on
|
||||
success, None on failure. If url is already non-http (already local), returns it.
|
||||
Caller is responsible for any per-host throttling between calls."""
|
||||
if not url or not url.startswith("http"):
|
||||
return url
|
||||
|
||||
path = urllib.parse.urlparse(url).path
|
||||
ext = os.path.splitext(path)[1].lower()
|
||||
if ext not in (".jpg", ".jpeg", ".png", ".gif", ".webp"):
|
||||
ext = ".jpg"
|
||||
|
||||
os.makedirs(REMOTE_DIR, exist_ok=True)
|
||||
local_name = f"{term_id}{ext}"
|
||||
local_path = os.path.join(REMOTE_DIR, local_name)
|
||||
new_url = f"{URL_PREFIX}/{local_name}"
|
||||
label = korean or f"term {term_id}"
|
||||
|
||||
if os.path.exists(local_path):
|
||||
conn.execute("UPDATE terms SET image_url=? WHERE id=?", (new_url, term_id))
|
||||
conn.commit()
|
||||
print(f"{log_prefix}↓ {label} — already local", flush=True)
|
||||
return new_url
|
||||
|
||||
IMAGE_MAGIC = (
|
||||
b"\x89PNG\r\n\x1a\n", # PNG
|
||||
b"\xff\xd8\xff", # JPEG
|
||||
b"GIF87a", b"GIF89a", # GIF
|
||||
b"RIFF", # WEBP (RIFF....WEBP)
|
||||
)
|
||||
|
||||
for attempt in range(5):
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
url,
|
||||
headers={"User-Agent": "DentalDictBot/2.0 (educational)"},
|
||||
)
|
||||
with urllib.request.urlopen(req, timeout=30) as r:
|
||||
ctype = (r.headers.get("Content-Type") or "").lower()
|
||||
data = r.read()
|
||||
if not ctype.startswith("image/"):
|
||||
print(f"{log_prefix}↓ {label} — not an image ({ctype or 'no type'}), keep URL",
|
||||
flush=True)
|
||||
return None
|
||||
if not any(data.startswith(m) for m in IMAGE_MAGIC):
|
||||
print(f"{log_prefix}↓ {label} — bad magic bytes, keep URL",
|
||||
flush=True)
|
||||
return None
|
||||
if len(data) < 1000:
|
||||
print(f"{log_prefix}↓ {label} — too small ({len(data)}B), keep URL",
|
||||
flush=True)
|
||||
return None
|
||||
with open(local_path, "wb") as f:
|
||||
f.write(data)
|
||||
conn.execute("UPDATE terms SET image_url=? WHERE id=?", (new_url, term_id))
|
||||
conn.commit()
|
||||
print(f"{log_prefix}↓ {label} — {len(data)//1024}KB ✓", flush=True)
|
||||
return new_url
|
||||
except Exception as e:
|
||||
is_429 = "429" in str(e)
|
||||
if attempt < 4:
|
||||
wait = min(30 * (attempt + 1), 120) if is_429 else 5
|
||||
print(f"{log_prefix}↓ {label} — retry {attempt+1}/5 after {wait}s: {e}",
|
||||
flush=True)
|
||||
time.sleep(wait)
|
||||
else:
|
||||
print(f"{log_prefix}↓ {label} — FAILED: {e} (URL kept)", flush=True)
|
||||
return None
|
||||
|
||||
|
||||
def download_images(limit=None, category=None, dry_run=False):
|
||||
os.makedirs(REMOTE_DIR, exist_ok=True)
|
||||
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
|
||||
query = """
|
||||
SELECT id, korean, image_url
|
||||
FROM terms
|
||||
WHERE image_url IS NOT NULL AND image_url != ''
|
||||
AND image_url LIKE 'http%'
|
||||
"""
|
||||
params = []
|
||||
if category:
|
||||
query += " AND category=?"
|
||||
params.append(category)
|
||||
|
||||
rows = conn.execute(query, params).fetchall()
|
||||
if limit:
|
||||
rows = rows[:limit]
|
||||
|
||||
print(f"Remote images to download: {len(rows)}", flush=True)
|
||||
|
||||
downloaded = 0
|
||||
skipped = 0
|
||||
failed = 0
|
||||
|
||||
for i, (term_id, korean, url) in enumerate(rows, 1):
|
||||
if dry_run:
|
||||
print(f" [{i}/{len(rows)}] {korean} — would download {url}", flush=True)
|
||||
downloaded += 1
|
||||
continue
|
||||
|
||||
prefix = f" [{i}/{len(rows)}] "
|
||||
before = os.path.exists(os.path.join(
|
||||
REMOTE_DIR,
|
||||
f"{term_id}{os.path.splitext(urllib.parse.urlparse(url).path)[1].lower() or '.jpg'}",
|
||||
))
|
||||
result = localize_image(conn, term_id, url, korean=korean, log_prefix=prefix)
|
||||
if result is None:
|
||||
failed += 1
|
||||
elif before:
|
||||
skipped += 1
|
||||
else:
|
||||
downloaded += 1
|
||||
|
||||
time.sleep(2 if "wikimedia" in url else 0.5)
|
||||
|
||||
if not dry_run:
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
print(f"\nDone: {downloaded} downloaded, {skipped} skipped (already local), {failed} failed", flush=True)
|
||||
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description=__doc__)
|
||||
p.add_argument("--limit", type=int, default=None)
|
||||
p.add_argument("--category", default=None)
|
||||
p.add_argument("--dry-run", action="store_true")
|
||||
args = p.parse_args()
|
||||
download_images(limit=args.limit, category=args.category, dry_run=args.dry_run)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,398 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Scrape PCSP (Pragmatic Case Studies in Psychotherapy) and build SQLite DB."""
|
||||
|
||||
import sqlite3
|
||||
import json
|
||||
import time
|
||||
import re
|
||||
import sys
|
||||
from urllib.request import urlopen, Request
|
||||
from html.parser import HTMLParser
|
||||
|
||||
BASE = "https://pcsp.nationalregister.org/index.php/pcsp"
|
||||
DB_PATH = "/home/kim/homeclaw/.smallclaw/databases/psychotherapy_cases.db"
|
||||
HEADERS = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"}
|
||||
|
||||
# ── HTML text extraction ──────────────────────────────────────────────
|
||||
|
||||
class TextExtractor(HTMLParser):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._pieces = []
|
||||
self._skip = False
|
||||
def handle_starttag(self, tag, attrs):
|
||||
if tag in ("script", "style", "nav", "header", "footer"):
|
||||
self._skip = True
|
||||
def handle_endtag(self, tag):
|
||||
if tag in ("script", "style", "nav", "header", "footer"):
|
||||
self._skip = False
|
||||
def handle_data(self, data):
|
||||
if not self._skip:
|
||||
self._pieces.append(data)
|
||||
def get_text(self):
|
||||
return " ".join(self._pieces)
|
||||
|
||||
def fetch(url, retries=3):
|
||||
for i in range(retries):
|
||||
try:
|
||||
req = Request(url, headers=HEADERS)
|
||||
with urlopen(req, timeout=30) as r:
|
||||
return r.read().decode("utf-8", errors="replace")
|
||||
except Exception as e:
|
||||
print(f" Retry {i+1}/{retries} for {url}: {e}", file=sys.stderr)
|
||||
time.sleep(5 * (i + 1))
|
||||
return ""
|
||||
|
||||
def html_to_text(html):
|
||||
p = TextExtractor()
|
||||
p.feed(html)
|
||||
return p.get_text().strip()
|
||||
|
||||
# ── Issue list from archive ──────────────────────────────────────────
|
||||
|
||||
def get_all_issues():
|
||||
"""Get all issue URLs from archive pages."""
|
||||
issues = []
|
||||
for page in range(1, 5):
|
||||
url = f"{BASE}/issue/archive/{page}" if page > 1 else f"{BASE}/issue/archive"
|
||||
html = fetch(url)
|
||||
# Find issue view links
|
||||
for m in re.finditer(r'href="(https?://[^"]*/issue/view/(\d+))"', html):
|
||||
issue_url, issue_id = m.group(1), m.group(2)
|
||||
# Extract volume info from nearby text
|
||||
issues.append({"url": issue_url, "issue_id": int(issue_id)})
|
||||
# Deduplicate
|
||||
seen = set()
|
||||
unique = []
|
||||
for i in issues:
|
||||
if i["issue_id"] not in seen:
|
||||
seen.add(i["issue_id"])
|
||||
unique.append(i)
|
||||
return sorted(unique, key=lambda x: x["issue_id"], reverse=True)
|
||||
|
||||
# ── Article extraction from issue page ────────────────────────────────
|
||||
|
||||
def extract_articles_from_issue(issue_url, issue_id):
|
||||
"""Extract article links and metadata from an issue page."""
|
||||
html = fetch(issue_url)
|
||||
if not html:
|
||||
return []
|
||||
|
||||
# Find volume/issue info
|
||||
vol_match = re.search(r'Vol\s*(\d+)[\s,]+No\s*(\d+)\s*\((\d{4})\)', html)
|
||||
vol = int(vol_match.group(1)) if vol_match else 0
|
||||
num = int(vol_match.group(2)) if vol_match else 0
|
||||
year = int(vol_match.group(3)) if vol_match else 0
|
||||
|
||||
articles = []
|
||||
# Find article view links
|
||||
seen_ids = set()
|
||||
for m in re.finditer(r'href="(https?://[^"]*/article/view/(\d+))"', html):
|
||||
art_url, art_id = m.group(1), m.group(2)
|
||||
art_id = int(art_id)
|
||||
if art_id in seen_ids:
|
||||
continue
|
||||
seen_ids.add(art_id)
|
||||
|
||||
# Try to find title near the link
|
||||
# The title is usually in the next <a> or nearby text
|
||||
# We'll get the title from the article page itself
|
||||
articles.append({
|
||||
"url": art_url,
|
||||
"article_id": art_id,
|
||||
"issue_id": issue_id,
|
||||
"vol": vol,
|
||||
"num": num,
|
||||
"year": year,
|
||||
})
|
||||
|
||||
return articles
|
||||
|
||||
# ── Article detail extraction ────────────────────────────────────────
|
||||
|
||||
def extract_article_detail(art):
|
||||
"""Get metadata from an article page."""
|
||||
url = art["url"]
|
||||
html = fetch(url)
|
||||
if not html:
|
||||
return None
|
||||
|
||||
text = html_to_text(html)
|
||||
|
||||
# Title: usually in <h1> or meta tag
|
||||
title = ""
|
||||
h1_match = re.search(r'<h1[^>]*>(.*?)</h1>', html, re.DOTALL)
|
||||
if h1_match:
|
||||
title = re.sub(r'<[^>]+>', '', h1_match.group(1)).strip()
|
||||
if not title:
|
||||
meta_match = re.search(r'<meta\s+name="citation_title"\s+content="([^"]+)"', html)
|
||||
if meta_match:
|
||||
title = meta_match.group(1)
|
||||
if not title:
|
||||
meta_match = re.search(r'<meta\s+property="og:title"\s+content="([^"]+)"', html)
|
||||
if meta_match:
|
||||
title = meta_match.group(1)
|
||||
|
||||
# Authors
|
||||
authors = ""
|
||||
author_matches = re.findall(r'<meta\s+name="citation_author"\s+content="([^"]+)"', html)
|
||||
if author_matches:
|
||||
authors = "; ".join(author_matches)
|
||||
|
||||
# DOI
|
||||
doi = ""
|
||||
doi_match = re.search(r'<meta\s+name="citation_doi"\s+content="([^"]+)"', html)
|
||||
if doi_match:
|
||||
doi = doi_match.group(1)
|
||||
|
||||
# Keywords
|
||||
keywords = ""
|
||||
kw_match = re.search(r'<meta\s+name="citation_keywords"\s+content="([^"]+)"', html)
|
||||
if kw_match:
|
||||
keywords = kw_match.group(1)
|
||||
# Also try to find keywords section in text
|
||||
kw_section = re.search(r'Keywords[:\s]+(.*?)(?:\n|<|Introduction|Abstract)', text, re.IGNORECASE)
|
||||
if kw_section and not keywords:
|
||||
keywords = kw_section.group(1).strip().rstrip(".")
|
||||
|
||||
# Abstract
|
||||
abstract = ""
|
||||
# Try meta description first
|
||||
abs_match = re.search(r'<meta\s+name="description"\s+content="([^"]+)"', html)
|
||||
if abs_match:
|
||||
abstract = abs_match.group(1)
|
||||
# Try to find abstract section in the page
|
||||
if not abstract:
|
||||
abs_match = re.search(r'Abstract[:\s]+(.*?)(?:(?:Introduction|Keywords|1\.\s))', text, re.DOTALL | re.IGNORECASE)
|
||||
if abs_match:
|
||||
abstract = abs_match.group(1).strip()[:2000]
|
||||
if not abstract:
|
||||
# Try dc.description
|
||||
abs_match = re.search(r'<meta\s+name="DC\.Description"\s+content="([^"]+)"', html)
|
||||
if abs_match:
|
||||
abstract = abs_match.group(1)
|
||||
|
||||
# Article type
|
||||
article_type = "article"
|
||||
if "commentary" in title.lower():
|
||||
article_type = "commentary"
|
||||
elif "response" in title.lower() and "comment" in title.lower():
|
||||
article_type = "response"
|
||||
elif "case study" in title.lower() or "case " in title.lower():
|
||||
article_type = "case_study"
|
||||
|
||||
# Determine category from keywords/title
|
||||
category = classify_article(title, keywords)
|
||||
|
||||
result = {
|
||||
**art,
|
||||
"title_en": title,
|
||||
"authors": authors,
|
||||
"doi": doi,
|
||||
"keywords": keywords,
|
||||
"abstract_en": abstract[:3000] if abstract else "",
|
||||
"article_type": article_type,
|
||||
"category_en": category,
|
||||
}
|
||||
return result
|
||||
|
||||
def classify_article(title, keywords):
|
||||
"""Classify article into therapy approach category."""
|
||||
text = (title + " " + keywords).lower()
|
||||
|
||||
categories = {
|
||||
"CBT": ["cognitive behavio", "cbt", "cognitive-behavio", "cognitive therapy"],
|
||||
"DBT": ["dialectical behavio", "dbt"],
|
||||
"Psychodynamic": ["psychodynamic", "dynamic therapy", "psychoanalytic", "psychoanalysis"],
|
||||
"Humanistic": ["humanistic", "client-centered", "person-centered", "rogerian"],
|
||||
"AEDP": ["aedp", "accelerated experiential dynamic"],
|
||||
"ACT": ["acceptance and commitment", "act ", "act therapy"],
|
||||
"Schema Therapy": ["schema therapy"],
|
||||
"EMDR": ["emdr", "eye movement desensitization"],
|
||||
"Narrative Therapy": ["narrative therapy"],
|
||||
"Exposure Therapy": ["exposure therapy", "exposure and response prevention", "erp"],
|
||||
"Hypnosis": ["hypnosis", "hypnotherapy", "hypnotic"],
|
||||
"Integrative": ["integrative", "eclectic", "multimodal"],
|
||||
"EFT": ["emotionally focused", "eft"],
|
||||
"Mindfulness": ["mindfulness", "mbct", "mbsr"],
|
||||
"SFBT": ["solution-focused", "solution focused", "sfbt"],
|
||||
}
|
||||
|
||||
for cat, terms in categories.items():
|
||||
if any(t in text for t in terms):
|
||||
return cat
|
||||
|
||||
return "Other"
|
||||
|
||||
# ── Korean translation mapping ────────────────────────────────────────
|
||||
|
||||
THERAPY_KO = {
|
||||
"CBT": "인지행동치료",
|
||||
"DBT": "변증법적행동치료",
|
||||
"Psychodynamic": "정신역동치료",
|
||||
"Humanistic": "인간중심치료",
|
||||
"AEDP": "가속적 경험적 역동치료",
|
||||
"ACT": "수용전념치료",
|
||||
"Schema Therapy": "도식치료",
|
||||
"EMDR": "안구운동 민감소실 재처리",
|
||||
"Narrative Therapy": "내러티브치료",
|
||||
"Exposure Therapy": "노출치료",
|
||||
"Hypnosis": "최면치료",
|
||||
"Integrative": "통합치료",
|
||||
"EFT": "정서초점치료",
|
||||
"Mindfulness": "마음챙김치료",
|
||||
"SFBT": "해결중심단기치료",
|
||||
"Other": "기타",
|
||||
}
|
||||
|
||||
CATEGORY_KO = {
|
||||
"CBT": "인지행동치료",
|
||||
"DBT": "변증법적행동치료",
|
||||
"Psychodynamic": "정신역동치료",
|
||||
"Humanistic": "인간중심치료",
|
||||
"AEDP": "가속적경험적역동치료",
|
||||
"ACT": "수용전념치료",
|
||||
"Schema Therapy": "도식치료",
|
||||
"EMDR": "안구운동민감소실재처리",
|
||||
"Narrative Therapy": "내러티브치료",
|
||||
"Exposure Therapy": "노출치료",
|
||||
"Hypnosis": "최면치료",
|
||||
"Integrative": "통합치료",
|
||||
"EFT": "정서초점치료",
|
||||
"Mindfulness": "마음챙김치료",
|
||||
"SFBT": "해결중심단기치료",
|
||||
"Other": "기타",
|
||||
}
|
||||
|
||||
# ── Build database ────────────────────────────────────────────────────
|
||||
|
||||
def create_db():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute("DROP TABLE IF EXISTS cases")
|
||||
c.execute("""CREATE TABLE cases (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
article_id INTEGER,
|
||||
issue_id INTEGER,
|
||||
vol INTEGER,
|
||||
num INTEGER,
|
||||
year INTEGER,
|
||||
title_en TEXT,
|
||||
title_ko TEXT,
|
||||
authors TEXT,
|
||||
article_type TEXT,
|
||||
category_en TEXT,
|
||||
category_ko TEXT,
|
||||
therapy_approach_en TEXT,
|
||||
therapy_approach_ko TEXT,
|
||||
keywords TEXT,
|
||||
abstract_en TEXT,
|
||||
abstract_ko TEXT,
|
||||
doi TEXT,
|
||||
url TEXT,
|
||||
source_url TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)""")
|
||||
conn.commit()
|
||||
return conn
|
||||
|
||||
def save_articles(conn, articles):
|
||||
c = conn.cursor()
|
||||
for art in articles:
|
||||
if not art or not art.get("title_en"):
|
||||
continue
|
||||
cat_en = art.get("category_en", "Other")
|
||||
cat_ko = CATEGORY_KO.get(cat_en, "기타")
|
||||
approach_en = cat_en
|
||||
approach_ko = THERAPY_KO.get(cat_en, "기타")
|
||||
|
||||
c.execute("""INSERT INTO cases (
|
||||
article_id, issue_id, vol, num, year,
|
||||
title_en, title_ko, authors, article_type,
|
||||
category_en, category_ko,
|
||||
therapy_approach_en, therapy_approach_ko,
|
||||
keywords, abstract_en, abstract_ko,
|
||||
doi, url, source_url
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",
|
||||
(
|
||||
art.get("article_id"),
|
||||
art.get("issue_id"),
|
||||
art.get("vol"),
|
||||
art.get("num"),
|
||||
art.get("year"),
|
||||
art.get("title_en", ""),
|
||||
"", # title_ko - will be translated later
|
||||
art.get("authors", ""),
|
||||
art.get("article_type", "article"),
|
||||
cat_en, cat_ko,
|
||||
approach_en, approach_ko,
|
||||
art.get("keywords", ""),
|
||||
art.get("abstract_en", ""),
|
||||
"", # abstract_ko - will be translated later
|
||||
art.get("doi", ""),
|
||||
art.get("url", ""),
|
||||
art.get("url", ""),
|
||||
))
|
||||
conn.commit()
|
||||
|
||||
# ── Main ──────────────────────────────────────────────────────────────
|
||||
|
||||
def main():
|
||||
print("=== PCSP Psychotherapy Case Studies DB Builder ===")
|
||||
print()
|
||||
|
||||
# Step 1: Get all issues
|
||||
print("[1/4] Fetching issue list...")
|
||||
issues = get_all_issues()
|
||||
print(f" Found {len(issues)} issues")
|
||||
|
||||
# Step 2: Get article links from each issue
|
||||
print("[2/4] Extracting article links from issues...")
|
||||
all_articles = []
|
||||
for i, issue in enumerate(issues):
|
||||
print(f" Issue {issue['issue_id']} ({i+1}/{len(issues)})...", end=" ", flush=True)
|
||||
arts = extract_articles_from_issue(issue["url"], issue["issue_id"])
|
||||
print(f"{len(arts)} articles")
|
||||
all_articles.extend(arts)
|
||||
time.sleep(1) # Be polite
|
||||
print(f" Total articles found: {len(all_articles)}")
|
||||
|
||||
# Step 3: Get details for each article
|
||||
print("[3/4] Extracting article details...")
|
||||
detailed_articles = []
|
||||
for i, art in enumerate(all_articles):
|
||||
print(f" Article {art['article_id']} ({i+1}/{len(all_articles)})...", end=" ", flush=True)
|
||||
detail = extract_article_detail(art)
|
||||
if detail:
|
||||
title_preview = detail.get("title_en", "")[:60]
|
||||
print(f"OK - {title_preview}...")
|
||||
detailed_articles.append(detail)
|
||||
else:
|
||||
print("SKIP (no data)")
|
||||
time.sleep(0.5) # Be polite
|
||||
|
||||
# Step 4: Save to database
|
||||
print(f"[4/4] Saving {len(detailed_articles)} articles to database...")
|
||||
conn = create_db()
|
||||
save_articles(conn, detailed_articles)
|
||||
|
||||
# Stats
|
||||
c = conn.cursor()
|
||||
c.execute("SELECT COUNT(*) FROM cases")
|
||||
total = c.fetchone()[0]
|
||||
c.execute("SELECT article_type, COUNT(*) FROM cases GROUP BY article_type")
|
||||
types = dict(c.fetchall())
|
||||
c.execute("SELECT category_en, COUNT(*) FROM cases GROUP BY category_en ORDER BY COUNT(*) DESC")
|
||||
cats = c.fetchall()
|
||||
|
||||
print()
|
||||
print(f"=== Done! {total} articles saved to {DB_PATH} ===")
|
||||
print(f" Types: {types}")
|
||||
print(f" Categories:")
|
||||
for cat, cnt in cats:
|
||||
print(f" {cat}: {cnt}")
|
||||
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Batch translate PCSP article titles to Korean using the homeclaw gateway API."""
|
||||
|
||||
import sqlite3
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
|
||||
DB_PATH = "/home/kim/homeclaw/.smallclaw/databases/psychotherapy_cases.db"
|
||||
API_URL = "http://localhost:18789/v1/chat/completions"
|
||||
|
||||
def translate_batch(titles, model="exa-one-3.0:free"):
|
||||
"""Translate a batch of titles using the gateway API."""
|
||||
prompt = """Translate the following psychology/psychotherapy article titles from English to Korean.
|
||||
Rules:
|
||||
- Keep person names in quotes as-is (e.g., "Fran", "Jane", "Tommy")
|
||||
- Keep acronyms as-is (CBT, DBT, AEDP, OCD, etc.)
|
||||
- Translate therapy names: Cognitive Behavioral Therapy→인지행동치료, Dialectical Behavior Therapy→변증법적행동치료, Psychodynamic→정신역동, Schema Therapy→도식치료, Exposure Therapy→노출치료, etc.
|
||||
- Keep the overall meaning and tone professional
|
||||
- Each line has format: NUMBER|ENGLISH_TITLE
|
||||
- Return ONLY the translations in format: NUMBER|KOREAN_TITLE
|
||||
- Do not add any explanations or notes
|
||||
|
||||
"""
|
||||
for id_, title, cat in titles:
|
||||
prompt += f"{id_}|{title}\n"
|
||||
|
||||
data = json.dumps({
|
||||
"model": model,
|
||||
"messages": [
|
||||
{"role": "system", "content": "You are a professional Korean-English translator specializing in psychology and psychotherapy terminology. Translate accurately and naturally."},
|
||||
{"role": "user", "content": prompt}
|
||||
],
|
||||
"temperature": 0.3,
|
||||
"max_tokens": 4096,
|
||||
}).encode("utf-8")
|
||||
|
||||
req = urllib.request.Request(
|
||||
API_URL,
|
||||
data=data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=120) as resp:
|
||||
result = json.loads(resp.read().decode("utf-8"))
|
||||
return result["choices"][0]["message"]["content"]
|
||||
except Exception as e:
|
||||
print(f"API error: {e}", file=sys.stderr)
|
||||
return None
|
||||
|
||||
def main():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
|
||||
# Get untranslated titles
|
||||
c.execute("SELECT id, title_en, category_en FROM cases WHERE title_ko = '' OR title_ko IS NULL ORDER BY id")
|
||||
rows = c.fetchall()
|
||||
|
||||
if not rows:
|
||||
print("All titles translated!")
|
||||
return
|
||||
|
||||
print(f"Translating {len(rows)} remaining titles...")
|
||||
|
||||
batch_size = 20
|
||||
total_translated = 0
|
||||
|
||||
for i in range(0, len(rows), batch_size):
|
||||
batch = rows[i:i+batch_size]
|
||||
print(f"\nBatch {i//batch_size + 1}/{(len(rows) + batch_size - 1)//batch_size} ({len(batch)} titles)...")
|
||||
|
||||
result = translate_batch(batch)
|
||||
if not result:
|
||||
print("Translation failed, skipping batch")
|
||||
continue
|
||||
|
||||
# Parse translations
|
||||
for line in result.strip().split("\n"):
|
||||
line = line.strip()
|
||||
if "|" in line:
|
||||
parts = line.split("|", 1)
|
||||
try:
|
||||
id_ = int(parts[0].strip())
|
||||
title_ko = parts[1].strip()
|
||||
# Remove markdown formatting if present
|
||||
title_ko = title_ko.strip("*").strip()
|
||||
c.execute("UPDATE cases SET title_ko = ? WHERE id = ?", (title_ko, id_))
|
||||
total_translated += 1
|
||||
except (ValueError, IndexError):
|
||||
print(f" Skipping malformed line: {line}")
|
||||
continue
|
||||
|
||||
conn.commit()
|
||||
print(f" Translated so far: {total_translated}")
|
||||
time.sleep(2) # Rate limiting
|
||||
|
||||
# Final stats
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE title_ko != '' AND title_ko IS NOT NULL")
|
||||
translated = c.fetchone()[0]
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE title_ko = '' OR title_ko IS NULL")
|
||||
remaining = c.fetchone()[0]
|
||||
|
||||
print(f"\nDone! Translated: {translated}, Remaining: {remaining}")
|
||||
|
||||
# Sample
|
||||
print("\n--- Sample translations ---")
|
||||
c.execute("SELECT title_en, title_ko FROM cases WHERE title_ko != '' AND title_ko IS NOT NULL ORDER BY RANDOM() LIMIT 10")
|
||||
for row in c.fetchall():
|
||||
en = row[0][:60]
|
||||
ko = row[1][:60]
|
||||
print(f" EN: {en}...")
|
||||
print(f" KO: {ko}...")
|
||||
print()
|
||||
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,299 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Fast batch translate PCSP titles using pattern-based approach + key term mapping.
|
||||
For case_study types, creates more detailed translations.
|
||||
For commentary/response types, creates shorter descriptive translations."""
|
||||
|
||||
import sqlite3
|
||||
import re
|
||||
import html
|
||||
|
||||
DB_PATH = "/home/kim/homeclaw/.smallclaw/databases/psychotherapy_cases.db"
|
||||
|
||||
# Comprehensive term mapping (longest first for proper matching)
|
||||
TERM_MAP = [
|
||||
# Therapy approaches (long phrases first)
|
||||
("Accelerated Experiential Dynamic Psychotherapy", "가속적경험적역동치료"),
|
||||
("Accelerated Experiential Dynamic", "가속적경험적역동"),
|
||||
("Emotionally Focused Couple Therapy", "정서초점부부치료"),
|
||||
("Emotionally Focused Therapy", "정서초점치료"),
|
||||
("Affect Phobia Therapy", "정서공포치료"),
|
||||
("Affect Phobia", "정서공포"),
|
||||
("Regulation Focused Psychotherapy for Children", "아동조절초점치료"),
|
||||
("Regulation Focused Psychotherapy", "조절초점치료"),
|
||||
("Dialectical Behavior Therapy", "변증법적행동치료"),
|
||||
("Cognitive Behavioral Therapy", "인지행동치료"),
|
||||
("Cognitive-Behavioral Therapy", "인지행동치료"),
|
||||
("Cognitive Behavior Therapy", "인지행동치료"),
|
||||
("Short-Term Psychodynamic Psychotherapy", "단기정신역동치료"),
|
||||
("Short-Term Psychodynamic", "단기정신역동"),
|
||||
("Written Exposure Therapy", "작성노출치료"),
|
||||
("Exposure and Response Prevention", "노출및반응방지"),
|
||||
("Exposure Therapy", "노출치료"),
|
||||
("Prolonged Exposure", "지속노출"),
|
||||
("Schema Therapy", "도식치료"),
|
||||
("Narrative Therapy", "내러티브치료"),
|
||||
("Solution-Focused Brief Therapy", "해결중심단기치료"),
|
||||
("Solution-Focused", "해결중심"),
|
||||
("Client-Centered Psychotherapy", "내담자중심치료"),
|
||||
("Client-Centered Therapy", "내담자중심치료"),
|
||||
("Person-Centered Therapy", "인간중심치료"),
|
||||
("Psychodynamic Psychotherapy", "정신역동치료"),
|
||||
("Psychodynamic Therapy", "정신역동치료"),
|
||||
("Dynamic Psychotherapy", "역동치료"),
|
||||
("Psychoanalytic Therapy", "정신분석치료"),
|
||||
("Integrative Psychotherapy", "통합심리치료"),
|
||||
("Integrative Therapy", "통합치료"),
|
||||
("Group Cognitive Behavioral", "집단인지행동"),
|
||||
("Group Therapy", "집단치료"),
|
||||
("Couple Therapy", "부부치료"),
|
||||
("Couples Therapy", "부부치료"),
|
||||
("Family Therapy", "가족치료"),
|
||||
("Acceptance and Commitment Therapy", "수용전념치료"),
|
||||
("Paradoxical Intention", "역설적의도"),
|
||||
("Mentalization", "정신화"),
|
||||
("Mindfulness-Based", "마음챙김기반"),
|
||||
("Mindfulness", "마음챙김"),
|
||||
("Hypnosis", "최면"),
|
||||
("Hypnotherapy", "최면치료"),
|
||||
("Hypnotic", "최면"),
|
||||
("Psychotherapy", "심리치료"),
|
||||
("psychotherapy", "심리치료"),
|
||||
# Disorders
|
||||
("Post-Traumatic Stress Disorder", "외상후스트레스장애"),
|
||||
("Posttraumatic Stress Disorder", "외상후스트레스장애"),
|
||||
("Complex PTSD", "복합외상후스트레스장애"),
|
||||
("Obsessive-Compulsive Disorder", "강박장애"),
|
||||
("Obsessive Compulsive Disorder", "강박장애"),
|
||||
("Borderline Personality Disorder", "경계선인격장애"),
|
||||
("Bipolar Disorder", "양극성장애"),
|
||||
("Panic Disorder", "공황장애"),
|
||||
("Anxiety Disorders", "불안장애"),
|
||||
("Anxiety Disorder", "불안장애"),
|
||||
("Social Phobia", "사회공포증"),
|
||||
("Social Anxiety", "사회불안"),
|
||||
("Obsessive-Compulsive", "강박"),
|
||||
("Obsessive Compulsive", "강박"),
|
||||
("Alcohol Use Disorder", "알코올사용장애"),
|
||||
("Alcohol Abuse", "알코올남용"),
|
||||
("Body Dysmorphic", "신체이형"),
|
||||
("Attention Deficit Hyperactivity Disorder", "주의력결핍과다행동장애"),
|
||||
("Tourette Syndrome", "투렛증후군"),
|
||||
("Agoraphobia", "광장공포증"),
|
||||
("Relational Trauma", "관계적외상"),
|
||||
("Developmental Disability", "발달장애"),
|
||||
("Developmental Disabilities", "발달장애"),
|
||||
("Executive Dysfunction", "실행기능장애"),
|
||||
("Cognitive Difficulties", "인지어려움"),
|
||||
("Externalizing Behavior", "외현화행동"),
|
||||
("Conduct Problem", "품행문제"),
|
||||
("Child Maltreatment", "아동학대"),
|
||||
("Masculinity Norms", "남성성규범"),
|
||||
("Inflexibly Enacted Traditional Masculinity", "경직된전통적남성성"),
|
||||
("Suicide Prevention", "자살예방"),
|
||||
("Psychosis", "정신병"),
|
||||
("Psychotic", "정신병적"),
|
||||
("Schizophrenia", "조현병"),
|
||||
("Depression", "우울증"),
|
||||
("Depressive", "우울"),
|
||||
("Anxiety", "불안"),
|
||||
("Trauma", "외상"),
|
||||
("Traumatic", "외상"),
|
||||
("PTSD", "외상후스트레스장애"),
|
||||
("OCD", "강박장애"),
|
||||
("BPD", "경계선인격장애"),
|
||||
("DBT", "변증법적행동치료"),
|
||||
("CBT", "인지행동치료"),
|
||||
("ACT", "수용전념치료"),
|
||||
("EFT", "정서초점치료"),
|
||||
("AEDP", "가속적경험적역동치료"),
|
||||
# Common patterns
|
||||
("Case Study", "사례연구"),
|
||||
("case study", "사례연구"),
|
||||
("Case Formulation", "사례공식화"),
|
||||
("Theory-Building", "이론구축"),
|
||||
("Theory Building", "이론구축"),
|
||||
("Practice-Based Evidence", "실천기반근거"),
|
||||
("Evidence-Based Practice", "근거기반실천"),
|
||||
("Evidence-Based", "근거기반"),
|
||||
("Outcome Management", "결과관리"),
|
||||
("Therapeutic Alliance", "치료적동맹"),
|
||||
("Working Alliance", "작업동맹"),
|
||||
("Autobiographical Memory", "자전적기억"),
|
||||
("Religious Delusion", "종교적망상"),
|
||||
("Altered State of Consciousness", "변된의식상태"),
|
||||
("Three-Party Dialogue", "3자대화"),
|
||||
("Incredible Years", "인크레더블연구"),
|
||||
("Qualitative Analysis", "질적분석"),
|
||||
("Qualitative", "질적"),
|
||||
("Quantitative", "양적"),
|
||||
("Mixed Methods", "혼합방법"),
|
||||
("Short-Term", "단기"),
|
||||
("Long-Term", "장기"),
|
||||
("Later-Life", "노년기"),
|
||||
("Late-Life", "노년기"),
|
||||
("Older Adult", "노인"),
|
||||
("Young Children", "영유아"),
|
||||
("Commentary", "논평"),
|
||||
("commentary", "논평"),
|
||||
("Commentaries", "논평"),
|
||||
("Reflections", "고찰"),
|
||||
("Reflection", "고찰"),
|
||||
("Response to Commentaries", "논평에 대한 응답"),
|
||||
("Additional Perspectives", "추가 관점"),
|
||||
("Introduction", "서론"),
|
||||
("Clinician-Guided", "임상가안내"),
|
||||
("Manualized", "매뉴얼화"),
|
||||
("Self-Help", "자가도움"),
|
||||
("Telepsych", "원격심리"),
|
||||
("Online Therapy", "온라인치료"),
|
||||
("Cultural Competence", "문화적역량"),
|
||||
("Cultural", "문화적"),
|
||||
("Multicultural", "다문화"),
|
||||
("Feminist", "페미니스트"),
|
||||
("Existential", "실존적"),
|
||||
("Existentialism", "실존주의"),
|
||||
("Sociocultural", "사회문화적"),
|
||||
("Interpersonal", "대인관계"),
|
||||
("Integrative", "통합적"),
|
||||
("Integrating", "통합한"),
|
||||
("Integrating", "~에 통합한"),
|
||||
("Comparative", "비교"),
|
||||
("Comparing", "비교"),
|
||||
("Contrasting", "대조"),
|
||||
("Methodological", "방법론적"),
|
||||
("Methodology", "방법론"),
|
||||
("Systematic", "체계적"),
|
||||
("Pragmatic", "실용적"),
|
||||
("Empirical", "실증적"),
|
||||
("Epistemology", "인식론"),
|
||||
("Objectivity", "객체성"),
|
||||
("Causality", "인과성"),
|
||||
("Clinical", "임상"),
|
||||
("Therapeutic", "치료적"),
|
||||
("Adolescent", "청소년"),
|
||||
("Youth", "청소년"),
|
||||
("Children", "아동"),
|
||||
("Child", "아동"),
|
||||
("Veterans", "참전군인"),
|
||||
("Veteran", "참전군인"),
|
||||
("Suicide", "자살"),
|
||||
("Suicidal", "자살"),
|
||||
("Treatment", "치료"),
|
||||
("treatment", "치료"),
|
||||
("Therapy", "치료"),
|
||||
("therapy", "치료"),
|
||||
("Psychotherapy", "심리치료"),
|
||||
]
|
||||
|
||||
def clean_title(title):
|
||||
"""Clean HTML entities and whitespace."""
|
||||
title = html.unescape(title)
|
||||
title = re.sub(r'\s+', ' ', title).strip()
|
||||
return title
|
||||
|
||||
def translate_title(title_en, category_en, category_ko, article_type):
|
||||
"""Translate title using pattern matching with category-aware fallback."""
|
||||
title = clean_title(title_en)
|
||||
|
||||
if not title:
|
||||
return ""
|
||||
|
||||
# Apply term replacements (longest first)
|
||||
result = title
|
||||
for en, ko in TERM_MAP:
|
||||
# Case-sensitive for proper nouns, case-insensitive for common terms
|
||||
if en[0].isupper() and len(en) > 3:
|
||||
result = result.replace(en, ko)
|
||||
else:
|
||||
result = re.sub(re.escape(en), ko, result, flags=re.IGNORECASE)
|
||||
|
||||
# Clean up spacing
|
||||
result = re.sub(r'\s+', ' ', result).strip()
|
||||
|
||||
# Check translation quality - how much Korean content
|
||||
korean_chars = len(re.findall(r'[가-힣]', result))
|
||||
total_chars = len(result.replace(' ', ''))
|
||||
|
||||
if total_chars > 0 and korean_chars / total_chars > 0.3:
|
||||
# Decent translation - clean up any remaining artifacts
|
||||
result = re.sub(r'\s{2,}', ' ', result).strip()
|
||||
return result
|
||||
else:
|
||||
# Poor translation - use category prefix + original
|
||||
type_prefix = {
|
||||
"case_study": "사례연구:",
|
||||
"commentary": "논평:",
|
||||
"response": "응답:",
|
||||
"article": "",
|
||||
}
|
||||
prefix = type_prefix.get(article_type, "")
|
||||
return f"[{category_ko}] {prefix} {title}" if prefix else f"[{category_ko}] {title}"
|
||||
|
||||
def main():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
|
||||
# Get untranslated titles
|
||||
c.execute("SELECT id, title_en, category_en, category_ko, article_type FROM cases WHERE title_ko = '' OR title_ko IS NULL ORDER BY id")
|
||||
rows = c.fetchall()
|
||||
|
||||
print(f"Translating {len(rows)} remaining titles...")
|
||||
|
||||
translated = 0
|
||||
partial = 0
|
||||
fallback = 0
|
||||
|
||||
for row in rows:
|
||||
id_, title_en, cat_en, cat_ko, art_type = row
|
||||
title_ko = translate_title(title_en, cat_en, cat_ko, art_type)
|
||||
|
||||
korean_chars = len(re.findall(r'[가-힣]', title_ko))
|
||||
total_chars = len(title_ko.replace(' ', ''))
|
||||
|
||||
if total_chars > 0 and korean_chars / total_chars > 0.5:
|
||||
translated += 1
|
||||
elif total_chars > 0 and korean_chars / total_chars > 0.2:
|
||||
partial += 1
|
||||
else:
|
||||
fallback += 1
|
||||
|
||||
c.execute("UPDATE cases SET title_ko = ? WHERE id = ?", (title_ko, id_))
|
||||
|
||||
conn.commit()
|
||||
|
||||
# Final stats
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE title_ko != '' AND title_ko IS NOT NULL")
|
||||
total_done = c.fetchone()[0]
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE title_ko = '' OR title_ko IS NULL")
|
||||
remaining = c.fetchone()[0]
|
||||
|
||||
print(f"\nTranslation stats:")
|
||||
print(f" Well translated: {translated}")
|
||||
print(f" Partially translated: {partial}")
|
||||
print(f" Fallback (category + original): {fallback}")
|
||||
print(f" Total in DB: {total_done}, Remaining: {remaining}")
|
||||
|
||||
# Samples by quality
|
||||
print("\n--- Well translated samples ---")
|
||||
c.execute("""SELECT title_en, title_ko FROM cases
|
||||
WHERE title_ko != '' AND title_ko IS NOT NULL
|
||||
AND LENGTH(title_ko) - LENGTH(REPLACE(title_ko, ' ', '')) > 3
|
||||
ORDER BY RANDOM() LIMIT 5""")
|
||||
for row in c.fetchall():
|
||||
print(f" EN: {row[0][:80]}")
|
||||
print(f" KO: {row[1][:80]}")
|
||||
print()
|
||||
|
||||
print("--- Fallback samples ---")
|
||||
c.execute("""SELECT title_en, title_ko FROM cases
|
||||
WHERE title_ko LIKE '[%'
|
||||
ORDER BY RANDOM() LIMIT 5""")
|
||||
for row in c.fetchall():
|
||||
print(f" EN: {row[0][:80]}")
|
||||
print(f" KO: {row[1][:80]}")
|
||||
print()
|
||||
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Translate psychiatry_cases diagnosis names to Korean using the Anthropic API."""
|
||||
|
||||
import sqlite3
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
import urllib.request
|
||||
|
||||
DB_PATH = "/home/kim/homeclaw/.smallclaw/databases/psychiatry_cases.db"
|
||||
API_URL = "http://localhost:11434/v1/chat/completions"
|
||||
MODEL = "kimi-k2.6:cloud"
|
||||
|
||||
|
||||
def translate_batch(items):
|
||||
prompt = """Translate the following DSM-5 psychiatric disorder names from English to Korean.
|
||||
Rules:
|
||||
- Use official/standard Korean DSM-5 terminology where established
|
||||
- Keep acronyms like ADHD, PTSD, OCD as-is if commonly used in Korean
|
||||
- Keep the parenthetical clarifications when present
|
||||
- Each line has format: NUMBER|ENGLISH_NAME
|
||||
- Return ONLY the translations in format: NUMBER|KOREAN_NAME
|
||||
- No explanations, no notes
|
||||
|
||||
"""
|
||||
for id_, name in items:
|
||||
prompt += f"{id_}|{name}\n"
|
||||
|
||||
data = json.dumps({
|
||||
"model": MODEL,
|
||||
"messages": [
|
||||
{"role": "system", "content": "You are a professional Korean-English translator specializing in psychiatry and DSM-5 terminology. Use accurate, standard Korean psychiatric terms."},
|
||||
{"role": "user", "content": prompt},
|
||||
],
|
||||
"temperature": 0.2,
|
||||
}).encode("utf-8")
|
||||
|
||||
req = urllib.request.Request(
|
||||
API_URL,
|
||||
data=data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=120) as resp:
|
||||
result = json.loads(resp.read().decode("utf-8"))
|
||||
return result["choices"][0]["message"]["content"]
|
||||
except Exception as e:
|
||||
print(f"API error: {e}", file=sys.stderr, flush=True)
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
|
||||
c.execute("SELECT id, diagnosis_en FROM cases WHERE (diagnosis_ko = '' OR diagnosis_ko IS NULL) AND diagnosis_en != '' ORDER BY id")
|
||||
rows = c.fetchall()
|
||||
|
||||
if not rows:
|
||||
print("All diagnoses translated!")
|
||||
conn.close()
|
||||
return
|
||||
|
||||
print(f"Translating {len(rows)} diagnosis names...", flush=True)
|
||||
|
||||
batch_size = 30
|
||||
total_translated = 0
|
||||
|
||||
for i in range(0, len(rows), batch_size):
|
||||
batch = rows[i:i + batch_size]
|
||||
print(f"\nBatch {i // batch_size + 1}/{(len(rows) + batch_size - 1) // batch_size} ({len(batch)} items)...", flush=True)
|
||||
|
||||
result = translate_batch(batch)
|
||||
if not result:
|
||||
print("Translation failed, skipping batch", flush=True)
|
||||
continue
|
||||
|
||||
updates = []
|
||||
for line in result.strip().split("\n"):
|
||||
line = line.strip()
|
||||
if "|" not in line:
|
||||
continue
|
||||
parts = line.split("|", 1)
|
||||
try:
|
||||
id_ = int(parts[0].strip())
|
||||
ko = parts[1].strip().strip("*").strip()
|
||||
updates.append((ko, id_))
|
||||
total_translated += 1
|
||||
except (ValueError, IndexError):
|
||||
print(f" Skipping: {line}", flush=True)
|
||||
|
||||
if updates:
|
||||
c.executemany("UPDATE cases SET diagnosis_ko = ? WHERE id = ?", updates)
|
||||
conn.commit()
|
||||
|
||||
print(f" Translated so far: {total_translated}", flush=True)
|
||||
time.sleep(2)
|
||||
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE diagnosis_ko != '' AND diagnosis_ko IS NOT NULL")
|
||||
done = c.fetchone()[0]
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE diagnosis_ko = '' OR diagnosis_ko IS NULL")
|
||||
remaining = c.fetchone()[0]
|
||||
|
||||
print(f"\nDone! Translated: {done}, Remaining: {remaining}", flush=True)
|
||||
|
||||
print("\n--- Sample translations ---")
|
||||
c.execute("SELECT diagnosis_en, diagnosis_ko FROM cases WHERE diagnosis_ko != '' AND diagnosis_ko IS NOT NULL ORDER BY RANDOM() LIMIT 10")
|
||||
for row in c.fetchall():
|
||||
print(f" EN: {row[0]}")
|
||||
print(f" KO: {row[1]}")
|
||||
print()
|
||||
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Translate psychotherapy_cases abstract_en to abstract_ko using the Anthropic API."""
|
||||
|
||||
import sqlite3
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
import re
|
||||
import html
|
||||
import urllib.request
|
||||
|
||||
DB_PATH = "/home/kim/homeclaw/.smallclaw/databases/psychotherapy_cases.db"
|
||||
API_URL = "http://localhost:11434/v1/chat/completions"
|
||||
MODEL = "kimi-k2.6:cloud"
|
||||
|
||||
|
||||
def clean_abstract(text):
|
||||
"""Remove HTML entities and scraped noise from abstract text."""
|
||||
text = html.unescape(text)
|
||||
text = re.sub(r'\s*(Downloads|PDF|Published|[0-9]{2}/[0-9]{2}/[0-9]{4})\s*', ' ', text)
|
||||
text = re.sub(r'\t+', ' ', text)
|
||||
text = re.sub(r'\n{3,}', '\n\n', text)
|
||||
text = re.sub(r'[ \t]{2,}', ' ', text)
|
||||
return text.strip()
|
||||
|
||||
|
||||
def translate_abstract(id_, title_en, abstract_en):
|
||||
cleaned = clean_abstract(abstract_en)
|
||||
if len(cleaned) < 50:
|
||||
return None
|
||||
|
||||
prompt = f"""Translate the following psychotherapy research article abstract from English to Korean.
|
||||
|
||||
Article title: {title_en}
|
||||
|
||||
Abstract:
|
||||
{cleaned}
|
||||
|
||||
Rules:
|
||||
- Translate the full abstract accurately and professionally
|
||||
- Keep therapy acronyms (DBT, CBT, AEDP, EFT, ACT, OCD, BPD, PTSD, etc.) as-is
|
||||
- Keep person names in quotes as-is (e.g., "Jane", "Tommy")
|
||||
- Keep statistical values and measurements as-is
|
||||
- Use professional Korean psychology/psychotherapy terminology
|
||||
- Return ONLY the Korean translation, no explanations
|
||||
"""
|
||||
|
||||
data = json.dumps({
|
||||
"model": MODEL,
|
||||
"messages": [
|
||||
{"role": "system", "content": "You are a professional Korean-English translator specializing in psychotherapy and clinical psychology. Translate accurately and naturally using standard Korean psychological terminology."},
|
||||
{"role": "user", "content": prompt},
|
||||
],
|
||||
"temperature": 0.3,
|
||||
}).encode("utf-8")
|
||||
|
||||
req = urllib.request.Request(
|
||||
API_URL,
|
||||
data=data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=180) as resp:
|
||||
result = json.loads(resp.read().decode("utf-8"))
|
||||
return result["choices"][0]["message"]["content"].strip()
|
||||
except Exception as e:
|
||||
print(f" API error for id={id_}: {e}", file=sys.stderr, flush=True)
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
|
||||
c.execute("""SELECT id, title_en, abstract_en FROM cases
|
||||
WHERE (abstract_ko = '' OR abstract_ko IS NULL)
|
||||
AND abstract_en IS NOT NULL AND abstract_en != ''
|
||||
ORDER BY id""")
|
||||
rows = c.fetchall()
|
||||
|
||||
if not rows:
|
||||
print("All abstracts translated!")
|
||||
conn.close()
|
||||
return
|
||||
|
||||
print(f"Translating {len(rows)} abstracts...", flush=True)
|
||||
|
||||
total_translated = 0
|
||||
for i, (id_, title_en, abstract_en) in enumerate(rows):
|
||||
print(f"\n[{i+1}/{len(rows)}] id={id_}: {title_en[:60]}...", flush=True)
|
||||
|
||||
abstract_ko = translate_abstract(id_, title_en, abstract_en)
|
||||
if not abstract_ko:
|
||||
print(" Failed, skipping", flush=True)
|
||||
continue
|
||||
|
||||
c.execute("UPDATE cases SET abstract_ko = ? WHERE id = ?", (abstract_ko, id_))
|
||||
conn.commit()
|
||||
total_translated += 1
|
||||
print(f" Done ({len(abstract_ko)} chars)", flush=True)
|
||||
time.sleep(3)
|
||||
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE abstract_ko != '' AND abstract_ko IS NOT NULL")
|
||||
done = c.fetchone()[0]
|
||||
c.execute("SELECT COUNT(*) FROM cases WHERE (abstract_ko = '' OR abstract_ko IS NULL) AND abstract_en IS NOT NULL AND abstract_en != ''")
|
||||
remaining = c.fetchone()[0]
|
||||
|
||||
print(f"\nDone! Translated: {done} total, {remaining} remaining with English abstracts", flush=True)
|
||||
|
||||
print("\n--- Sample translations ---")
|
||||
c.execute("""SELECT title_en, abstract_ko FROM cases
|
||||
WHERE abstract_ko != '' AND abstract_ko IS NOT NULL
|
||||
ORDER BY RANDOM() LIMIT 3""")
|
||||
for row in c.fetchall():
|
||||
print(f" Title: {row[0][:70]}")
|
||||
print(f" KO: {row[1][:200]}...")
|
||||
print()
|
||||
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Vision speed benchmark: kimi-k2.6:cloud vs mistral-large-3:675b-cloud
|
||||
10 requests each, with image + text input.
|
||||
"""
|
||||
import base64, json, time, statistics, urllib.request, urllib.error, sys
|
||||
|
||||
OLLAMA_URL = "http://localhost:11434/api/chat"
|
||||
|
||||
OLLAMA_TAGS_URL = "http://localhost:11434/api/tags"
|
||||
|
||||
# thinking 모델은 토큰을 많이 써야 content가 나옴
|
||||
MODEL_OPTIONS = {
|
||||
"kimi-k2.6:cloud": {"num_predict": 2000},
|
||||
"glm-5.1:cloud": {"num_predict": 2000},
|
||||
"default": {"num_predict": 1000},
|
||||
}
|
||||
|
||||
MODELS = [
|
||||
"gpt-oss:120b-cloud",
|
||||
"gemini-3-flash-preview:cloud",
|
||||
]
|
||||
|
||||
# Test questions (varied to avoid caching)
|
||||
QUESTIONS = [
|
||||
"양자컴퓨터가 현재 암호화 기술에 미치는 위협을 간단히 설명해줘.",
|
||||
"우울증과 번아웃의 차이점은 뭐야?",
|
||||
"파이썬에서 GIL이 뭔지, 멀티스레딩에 어떤 영향을 주는지 설명해줘.",
|
||||
"기후변화 대응에서 탄소세와 탄소 배출권 거래제의 장단점 비교해줘.",
|
||||
"한국 부동산 시장에서 전세 제도의 장단점을 설명해줘.",
|
||||
"RAG(Retrieval-Augmented Generation)가 뭔지 쉽게 설명해줘.",
|
||||
"소크라테스의 무지의 지(知)가 현대 사회에서 갖는 의미는?",
|
||||
"비트코인의 작업증명(PoW)과 이더리움의 지분증명(PoS) 차이를 설명해줘.",
|
||||
"외상 후 스트레스 장애(PTSD) 치료에서 EMDR 요법이 효과적인 이유는?",
|
||||
"마이크로서비스 아키텍처의 장단점과 언제 쓰는 게 좋은지 알려줘.",
|
||||
]
|
||||
|
||||
def load_image_b64(path: str) -> str:
|
||||
with open(path, "rb") as f:
|
||||
return base64.b64encode(f.read()).decode()
|
||||
|
||||
def chat(model: str, question: str, img_b64: str = "") -> tuple[float, str, str]:
|
||||
msg: dict = {"role": "user", "content": question}
|
||||
if img_b64:
|
||||
msg["images"] = [img_b64]
|
||||
body = {
|
||||
"model": model,
|
||||
"stream": False,
|
||||
"messages": [msg],
|
||||
"options": MODEL_OPTIONS.get(model, MODEL_OPTIONS["default"]),
|
||||
}
|
||||
data = json.dumps(body).encode()
|
||||
req = urllib.request.Request(OLLAMA_URL, data=data,
|
||||
headers={"Content-Type": "application/json"})
|
||||
t0 = time.perf_counter()
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=120) as r:
|
||||
resp = json.loads(r.read())
|
||||
elapsed = time.perf_counter() - t0
|
||||
msg = resp.get("message", {})
|
||||
content = msg.get("content", "").strip()
|
||||
thinking = msg.get("thinking", "").strip()
|
||||
return elapsed, content, thinking
|
||||
except Exception as e:
|
||||
elapsed = time.perf_counter() - t0
|
||||
return elapsed, f"ERROR: {e}", ""
|
||||
|
||||
def benchmark(model: str, img_b64: str = "") -> tuple[list[float], list[str], list[str]]:
|
||||
times, responses, thinkings = [], [], []
|
||||
print(f"\n{'='*50}")
|
||||
print(f" {model}")
|
||||
print(f"{'='*50}")
|
||||
for i, q in enumerate(QUESTIONS):
|
||||
t, text, thinking = chat(model, q, img_b64)
|
||||
status = "✓" if not text.startswith("ERROR") else "✗"
|
||||
has_thinking = "💭" if thinking else " "
|
||||
print(f" [{i+1:02d}] {status}{has_thinking} {t:6.2f}s")
|
||||
times.append(t)
|
||||
responses.append(text)
|
||||
thinkings.append(thinking)
|
||||
sys.stdout.flush()
|
||||
return times, responses, thinkings
|
||||
|
||||
def main():
|
||||
print(f"테스트 모델 ({len(MODELS)}개): {', '.join(MODELS)}")
|
||||
print("모드: 일반 채팅 (이미지 없음)")
|
||||
|
||||
results = {}
|
||||
for model in MODELS:
|
||||
times, responses, thinkings = benchmark(model)
|
||||
results[model] = {"times": times, "responses": responses, "thinkings": thinkings}
|
||||
|
||||
# 응답 내용 비교
|
||||
print(f"\n{'='*60}")
|
||||
print(" 응답 내용 비교")
|
||||
print(f"{'='*60}")
|
||||
for i, q in enumerate(QUESTIONS):
|
||||
print(f"\n[Q{i+1}] {q}")
|
||||
for model in MODELS:
|
||||
name = model.split(":")[0].split("-")[0].upper()
|
||||
resp = results[model]["responses"][i]
|
||||
thinking = results[model]["thinkings"][i]
|
||||
t = results[model]["times"][i]
|
||||
print(f"\n [{name} {t:.1f}s]")
|
||||
if thinking:
|
||||
print(f" 💭 {thinking[:200]}")
|
||||
print(f" ✏️ {resp if resp else '(없음)'}")
|
||||
print()
|
||||
|
||||
# 속도 요약
|
||||
print(f"\n{'='*60}")
|
||||
print(" 속도 요약")
|
||||
print(f"{'='*60}")
|
||||
for model, data in results.items():
|
||||
times = data["times"]
|
||||
valid = [t for t in times if t < 115]
|
||||
if valid:
|
||||
print(f"\n {model}")
|
||||
print(f" 평균: {statistics.mean(valid):.2f}s 중앙값: {statistics.median(valid):.2f}s "
|
||||
f"최소: {min(valid):.2f}s 최대: {max(valid):.2f}s")
|
||||
|
||||
avgs = {m: statistics.mean([t for t in d["times"] if t < 115] or [999])
|
||||
for m, d in results.items()}
|
||||
winner = min(avgs, key=avgs.get)
|
||||
loser = max(avgs, key=avgs.get)
|
||||
diff = avgs[loser] - avgs[winner]
|
||||
print(f"\n 속도 승자: {winner} ({diff:.2f}s, {diff/avgs[loser]*100:.0f}% 빠름)")
|
||||
print(f"{'='*60}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Orofacial Problems in Musicians - 다운로드</title>
|
||||
<style>
|
||||
body { font-family: 'Malgun Gothic', sans-serif; max-width: 600px; margin: 60px auto; padding: 20px; text-align: center; background: #f8f9fa; }
|
||||
.card { background: white; border-radius: 12px; padding: 40px 30px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }
|
||||
h1 { color: #1a1a2e; font-size: 24px; margin-bottom: 10px; }
|
||||
p { color: #5f6f86; margin-bottom: 30px; }
|
||||
.btn { display: inline-block; background: #1668e3; color: white; text-decoration: none; padding: 14px 36px; border-radius: 8px; font-size: 16px; font-weight: bold; transition: background 0.2s; }
|
||||
.btn:hover { background: #1255bb; }
|
||||
.meta { margin-top: 20px; font-size: 12px; color: #888; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
<h1>Orofacial Problems in Musicians</h1>
|
||||
<p>슬라이드 6장이 준비되었습니다.</p>
|
||||
<a class="btn" href="orofacial_problems_in_musicians.pptx" download>프레젠테이션 다운로드</a>
|
||||
<div class="meta">/home/kim/homeclaw/.smallclaw/users/cherry/workspace/orofacial_problems_in_musicians/orofacial_problems_in_musicians.pptx</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 147 KiB |
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Violin_Viola_TMD_Summary - 다운로드</title>
|
||||
<style>
|
||||
body { font-family: 'Malgun Gothic', sans-serif; max-width: 600px; margin: 60px auto; padding: 20px; text-align: center; background: #f8f9fa; }
|
||||
.card { background: white; border-radius: 12px; padding: 40px 30px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }
|
||||
h1 { color: #1a1a2e; font-size: 24px; margin-bottom: 10px; }
|
||||
p { color: #5f6f86; margin-bottom: 30px; }
|
||||
.btn { display: inline-block; background: #1668e3; color: white; text-decoration: none; padding: 14px 36px; border-radius: 8px; font-size: 16px; font-weight: bold; transition: background 0.2s; }
|
||||
.btn:hover { background: #1255bb; }
|
||||
.meta { margin-top: 20px; font-size: 12px; color: #888; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
<h1>Violin_Viola_TMD_Summary</h1>
|
||||
<p>슬라이드 6장이 준비되었습니다.</p>
|
||||
<a class="btn" href="violin_viola_tmd_summary.pptx" download>프레젠테이션 다운로드</a>
|
||||
<div class="meta">/home/kim/homeclaw/.smallclaw/users/cherry/workspace/violin_viola_tmd_summary/violin_viola_tmd_summary.pptx</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>음악가의 구강 건강 가이드 - 다운로드</title>
|
||||
<style>
|
||||
body { font-family: 'Malgun Gothic', sans-serif; max-width: 600px; margin: 60px auto; padding: 20px; text-align: center; background: #f8f9fa; }
|
||||
.card { background: white; border-radius: 12px; padding: 40px 30px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }
|
||||
h1 { color: #1a1a2e; font-size: 24px; margin-bottom: 10px; }
|
||||
p { color: #5f6f86; margin-bottom: 30px; }
|
||||
.btn { display: inline-block; background: #1668e3; color: white; text-decoration: none; padding: 14px 36px; border-radius: 8px; font-size: 16px; font-weight: bold; transition: background 0.2s; }
|
||||
.btn:hover { background: #1255bb; }
|
||||
.meta { margin-top: 20px; font-size: 12px; color: #888; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
<h1>음악가의 구강 건강 가이드</h1>
|
||||
<p>슬라이드 6장이 준비되었습니다.</p>
|
||||
<a class="btn" href="음악가의_구강_건강_가이드.pptx" download>프레젠테이션 다운로드</a>
|
||||
<div class="meta">/home/kim/homeclaw/.smallclaw/users/cherry/workspace/음악가의_구강_건강_가이드/음악가의_구강_건강_가이드.pptx</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 46 KiB |
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"lawyer": false,
|
||||
"psychiatrist": false,
|
||||
"musician": false,
|
||||
"accountant": false,
|
||||
"investor": false,
|
||||
"counselor": false,
|
||||
"meteorologist": false,
|
||||
"presenter": false
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
# 🌿 정원 관리 모니터 시스템
|
||||
|
||||
ESP32 기반 스마트 정원 관리 시스템입니다. 온도, 습도, 토양 수분을 모니터링하고 자동으로 물을 줍니다.
|
||||
|
||||
## 📋 하드웨어 구성
|
||||
|
||||
| 부품 | 수량 | 용도 | 핀 |
|
||||
|------|------|------|-----|
|
||||
| ESP32 DevKit V1 | 1 | 메인 컨트롤러 | - |
|
||||
| DHT22 온습도 센서 | 1 | 온도/습도 측정 | GPIO 27 |
|
||||
| 토양 습도 센서 | 1 | 토양 수분 측정 | GPIO 34 (ADC) |
|
||||
| 2채널 릴레이 모듈 | 1 | 펌프/팬 제어 | GPIO 25, 26 |
|
||||
| LED (녹색/청색) | 2 | 상태 표시 | GPIO 2, 4 |
|
||||
| ESP32-CAM (선택) | 1 | 정원 카메라 | - |
|
||||
| 워터펌프 | 1 | 자동 물주기 | 릴레이1 |
|
||||
| 팬/조명 | 1 | 환기/보조광 | 릴레이2 |
|
||||
|
||||
## 🔧 회로도
|
||||
|
||||
```
|
||||
┌─────────────────┐
|
||||
│ ESP32 DevKit │
|
||||
│ │
|
||||
DHT22 VCC ───────┤ 3V3 │
|
||||
DHT22 GND ───────┤ GND │
|
||||
DHT22 OUT ───────┤ GPIO 27 GPIO 2 ├──── LED 녹색 (WiFi)
|
||||
(10kΩ 풀업) │ │
|
||||
│ GPIO 4 ├──── LED 청색 (펌프)
|
||||
토양센서 ─────────┤ GPIO 34 │
|
||||
(아날로그 출력) │ GPIO 25├──── 릴레이1 (펌프)
|
||||
│ GPIO 26├──── 릴레이2 (팬)
|
||||
│ │
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
## 🚀 Wokwi 에뮬레이터에서 실행
|
||||
|
||||
1. [Wokwi](https://wokwi.com) 에 접속
|
||||
2. 새 ESP32 프로젝트 생성
|
||||
3. `wokwi/diagram.json` 내용을 복사
|
||||
4. `src/` 폴더의 파일들을 업로드
|
||||
5. `sketch.ino` 에 `main.cpp` 내용 복사
|
||||
6. 시뮬레이션 실행
|
||||
|
||||
### Wokwi에서 토양 습도 시뮬레이션
|
||||
- 가변저항(Potentiometer)으로 토양 습도 시뮬레이션
|
||||
- 왼쪽으로 돌리면 건조, 오른쪽으로 돌리면 습함
|
||||
|
||||
## 🌐 대시보드 접속
|
||||
|
||||
1. ESP32가 WiFi에 연결되면 시리얼 모니터에 IP 주소 표시
|
||||
2. 브라우저에서 `http://<ESP32_IP>` 접속
|
||||
3. 실시간 센서 데이터 확인 및 원격 제어 가능
|
||||
|
||||
### 대시보드 기능
|
||||
- 🌡️ 실시간 온도 표시 (게이지)
|
||||
- 💧 실시간 습도 표시
|
||||
- 🌱 토양 습도 표시
|
||||
- 🚿 펌프 수동/자동 제어
|
||||
- 🌀 팬 수동 제어
|
||||
- ⚠️ 경보 상태 표시 (주의/위험)
|
||||
- 📊 데이터 로깅 (최대 288포인트)
|
||||
|
||||
## ⚙️ 임계값 설정
|
||||
|
||||
`config.h`에서 환경에 맞게 조정:
|
||||
|
||||
```cpp
|
||||
#define SOIL_DRY 25.0 // 토양이 건조하다고 판단하는 습도 %
|
||||
#define SOIL_MOIST 60.0 // 적정 습도 %
|
||||
#define SOIL_WET 80.0 // 과습 습도 %
|
||||
#define TEMP_HIGH_WARNING 30.0 // 고온 주의 °C
|
||||
```
|
||||
|
||||
## 📡 API 엔드포인트
|
||||
|
||||
| 엔드포인트 | 메서드 | 설명 |
|
||||
|-----------|--------|------|
|
||||
| `/` | GET | 대시보드 HTML |
|
||||
| `/api/data` | GET | 현재 센서 데이터 JSON |
|
||||
| `/api/history` | GET | 로깅된 데이터 JSON |
|
||||
| `/api/control?pump=1` | POST | 펌프 켜기 |
|
||||
| `/api/control?fan=1` | POST | 팬 켜기 |
|
||||
| `/api/control?auto=1` | POST | 자동물주기 토글 |
|
||||
|
||||
## 🔌 ESP32-CAM 연결 (선택)
|
||||
|
||||
카메라 2대를 연결하려면 ESP32-CAM 보드를 추가로 사용하세요:
|
||||
- ESP32-CAM #1: 전경 카메라 (WiFi로 이미지 전송)
|
||||
- ESP32-CAM #2: 근접 식물 카메라
|
||||
|
||||
`config.h`에서 `CAMERA_ENABLED`를 `1`로 설정하세요.
|
||||
|
||||
## 📝 라이선스
|
||||
|
||||
MIT License
|
||||
@@ -0,0 +1,39 @@
|
||||
; PlatformIO 프로젝트 설정
|
||||
; Wokwi 에뮬레이터 및 실제 ESP32 보드 모두 호환
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
board = esp32dev
|
||||
framework = arduino
|
||||
|
||||
; 소스 파일
|
||||
src_dir = src
|
||||
|
||||
; 라이브러리 의존성
|
||||
lib_deps =
|
||||
adafruit/DHT sensor library@^1.4.6
|
||||
adafruit/Adafruit Unified Sensor@^1.1.14
|
||||
links2004/WebSockets@^2.4.1
|
||||
|
||||
; 시리얼 모니터
|
||||
monitor_speed = 115200
|
||||
monitor_filters = esp32_exception_decoder
|
||||
|
||||
; 컴파일 옵션
|
||||
build_flags =
|
||||
-DCORE_DEBUG_LEVEL=3
|
||||
-DBOARD_HAS_PSRAM=0
|
||||
|
||||
; 파티션 테이블 (OTA용)
|
||||
; board_build.partitions = default.csv
|
||||
|
||||
[env:esp32cam]
|
||||
platform = espressif32
|
||||
board = esp32cam
|
||||
framework = arduino
|
||||
src_dir = src
|
||||
lib_deps = ${env:esp32dev.lib_deps}
|
||||
monitor_speed = 115200
|
||||
build_flags =
|
||||
-DCORE_DEBUG_LEVEL=3
|
||||
-DCAMERA_ENABLED=1
|
||||
@@ -0,0 +1,62 @@
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
// ==================== WiFi 설정 ====================
|
||||
#define WIFI_SSID "GardenNet"
|
||||
#define WIFI_PASSWORD "garden1234"
|
||||
|
||||
// ==================== 핀 설정 ====================
|
||||
// DHT22 온습도 센서
|
||||
#define DHT_PIN 27
|
||||
#define DHT_TYPE DHT22
|
||||
|
||||
// 토양 습도 센서 (아날로그)
|
||||
#define SOIL_PIN 34 // ADC1_CH6 (ESP32 ADC1 핀 - WiFi 충돌 없음)
|
||||
|
||||
// 카메라 핀 (ESP32-CAM 보드용)
|
||||
// 주의: 카메라 사용 시 WiFi와 일부 핀 공유됨
|
||||
#define CAMERA_ENABLED 0 // 0: 비활성화, 1: 활성화
|
||||
|
||||
// 릴레이 채널 (2채널)
|
||||
#define RELAY1_PIN 25 // 워터펌프
|
||||
#define RELAY2_PIN 26 // 팬/조명
|
||||
|
||||
// LED 상태 표시
|
||||
#define LED_WIFI_PIN 2 // 내장 LED (WiFi 상태)
|
||||
#define LED_PUMP_PIN 4 // 펌프 작동 표시 LED
|
||||
|
||||
// ==================== 임계값 설정 ====================
|
||||
// 온도
|
||||
#define TEMP_LOW_ALARM 5.0 // 저온 경고 (°C)
|
||||
#define TEMP_HIGH_ALARM 35.0 // 고온 경고 (°C)
|
||||
#define TEMP_LOW_WARNING 10.0 // 저온 주의
|
||||
#define TEMP_HIGH_WARNING 30.0 // 고온 주의
|
||||
|
||||
// 토양 습도 (%)
|
||||
#define SOIL_DRY 25.0 // 건조 - 펌프 켜짐
|
||||
#define SOIL_MOIST 60.0 // 적정
|
||||
#define SOIL_WET 80.0 // 과습 - 펌프 꺼짐
|
||||
|
||||
// 대기 습도 (%)
|
||||
#define HUMIDITY_LOW 30.0
|
||||
#define HUMIDITY_HIGH 80.0
|
||||
|
||||
// ==================== 펌프 제어 ====================
|
||||
#define PUMP_DURATION_MS 10000 // 펌프 1회 작동 시간 (10초)
|
||||
#define PUMP_COOLDOWN_MS 30000 // 펌프 재작동 대기 (30초)
|
||||
#define AUTO_WATER_ENABLED 1 // 자동 물주기 활성화
|
||||
|
||||
// ==================== 서버 설정 ====================
|
||||
#define WEB_SERVER_PORT 80
|
||||
#define MQTT_ENABLED 0 // 0: 비활성화, 1: 활성화
|
||||
#define MQTT_BROKER "192.168.1.100"
|
||||
#define MQTT_PORT 1883
|
||||
|
||||
// ==================== 센서 읽기 간격 ====================
|
||||
#define SENSOR_READ_INTERVAL_MS 5000 // 5초
|
||||
#define DASHBOARD_UPDATE_MS 2000 // 2초 (WebSocket)
|
||||
|
||||
// ==================== 데이터 로깅 ====================
|
||||
#define MAX_DATA_POINTS 288 // 24시간 × 12회/시간 = 5분 간격
|
||||
|
||||
#endif // CONFIG_H
|
||||
@@ -0,0 +1,95 @@
|
||||
#include "data_logger.h"
|
||||
#include "config.h"
|
||||
|
||||
DataLogger::DataLogger() {
|
||||
_head = 0;
|
||||
_count = 0;
|
||||
_lastLogTime = 0;
|
||||
_logInterval = SENSOR_READ_INTERVAL_MS * 6; // 약 30초 간격 로그
|
||||
}
|
||||
|
||||
void DataLogger::begin() {
|
||||
_head = 0;
|
||||
_count = 0;
|
||||
_lastLogTime = 0;
|
||||
}
|
||||
|
||||
void DataLogger::log(const SensorData& data) {
|
||||
unsigned long now = millis();
|
||||
if (now - _lastLogTime < _logInterval) return;
|
||||
|
||||
_entries[_head].temperature = data.temperature;
|
||||
_entries[_head].humidity = data.humidity;
|
||||
_entries[_head].soilMoisture = data.soilMoisture;
|
||||
_entries[_head].timestamp = now;
|
||||
|
||||
_head = (_head + 1) % MAX_LOG_ENTRIES;
|
||||
if (_count < MAX_LOG_ENTRIES) _count++;
|
||||
_lastLogTime = now;
|
||||
}
|
||||
|
||||
void DataLogger::clear() {
|
||||
_head = 0;
|
||||
_count = 0;
|
||||
}
|
||||
|
||||
String DataLogger::getJsonHistory(int lastN) const {
|
||||
int n = (lastN > 0 && lastN < _count) ? lastN : _count;
|
||||
String json = "[";
|
||||
for (int i = 0; i < n; i++) {
|
||||
int idx = (_head - n + i + MAX_LOG_ENTRIES) % MAX_LOG_ENTRIES;
|
||||
if (i > 0) json += ",";
|
||||
json += "{";
|
||||
json += "\"t\":" + String(_entries[idx].temperature, 1) + ",";
|
||||
json += "\"h\":" + String(_entries[idx].humidity, 1) + ",";
|
||||
json += "\"s\":" + String(_entries[idx].soilMoisture, 1) + ",";
|
||||
json += "\"ts\":" + String(_entries[idx].timestamp);
|
||||
json += "}";
|
||||
}
|
||||
json += "]";
|
||||
return json;
|
||||
}
|
||||
|
||||
float DataLogger::getAvgTemp(int lastN) const {
|
||||
if (_count == 0) return 0;
|
||||
int n = min(lastN, _count);
|
||||
float sum = 0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int idx = (_head - 1 - i + MAX_LOG_ENTRIES) % MAX_LOG_ENTRIES;
|
||||
sum += _entries[idx].temperature;
|
||||
}
|
||||
return sum / n;
|
||||
}
|
||||
|
||||
float DataLogger::getAvgSoil(int lastN) const {
|
||||
if (_count == 0) return 0;
|
||||
int n = min(lastN, _count);
|
||||
float sum = 0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int idx = (_head - 1 - i + MAX_LOG_ENTRIES) % MAX_LOG_ENTRIES;
|
||||
sum += _entries[idx].soilMoisture;
|
||||
}
|
||||
return sum / n;
|
||||
}
|
||||
|
||||
float DataLogger::getMinTemp(int lastN) const {
|
||||
if (_count == 0) return 0;
|
||||
int n = min(lastN, _count);
|
||||
float minVal = 999;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int idx = (_head - 1 - i + MAX_LOG_ENTRIES) % MAX_LOG_ENTRIES;
|
||||
if (_entries[idx].temperature < minVal) minVal = _entries[idx].temperature;
|
||||
}
|
||||
return minVal;
|
||||
}
|
||||
|
||||
float DataLogger::getMaxTemp(int lastN) const {
|
||||
if (_count == 0) return 0;
|
||||
int n = min(lastN, _count);
|
||||
float maxVal = -999;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int idx = (_head - 1 - i + MAX_LOG_ENTRIES) % MAX_LOG_ENTRIES;
|
||||
if (_entries[idx].temperature > maxVal) maxVal = _entries[idx].temperature;
|
||||
}
|
||||
return maxVal;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
#ifndef DATA_LOGGER_H
|
||||
#define DATA_LOGGER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "sensors.h"
|
||||
|
||||
#define MAX_LOG_ENTRIES MAX_DATA_POINTS
|
||||
|
||||
struct LogEntry {
|
||||
float temperature;
|
||||
float humidity;
|
||||
float soilMoisture;
|
||||
unsigned long timestamp;
|
||||
};
|
||||
|
||||
class DataLogger {
|
||||
public:
|
||||
DataLogger();
|
||||
void begin();
|
||||
void log(const SensorData& data);
|
||||
void clear();
|
||||
int getCount() const { return _count; }
|
||||
const LogEntry* getEntries() const { return _entries; }
|
||||
String getJsonHistory(int lastN = 0) const;
|
||||
|
||||
// 통계
|
||||
float getAvgTemp(int lastN = 12) const;
|
||||
float getAvgSoil(int lastN = 12) const;
|
||||
float getMinTemp(int lastN = 0) const;
|
||||
float getMaxTemp(int lastN = 0) const;
|
||||
|
||||
private:
|
||||
LogEntry _entries[MAX_LOG_ENTRIES];
|
||||
int _head;
|
||||
int _count;
|
||||
unsigned long _lastLogTime;
|
||||
unsigned long _logInterval;
|
||||
};
|
||||
|
||||
#endif // DATA_LOGGER_H
|
||||
@@ -0,0 +1,166 @@
|
||||
#include <WiFi.h>
|
||||
#include <WebServer.h>
|
||||
#include <DHT.h>
|
||||
#include "config.h"
|
||||
#include "sensors.h"
|
||||
#include "web_server.h"
|
||||
#include "data_logger.h"
|
||||
|
||||
// ==================== 전역 객체 ====================
|
||||
SensorManager sensors;
|
||||
DataLogger logger;
|
||||
WebManager webMgr(sensors);
|
||||
WebServer httpServer(WEB_SERVER_PORT);
|
||||
|
||||
unsigned long lastSensorRead = 0;
|
||||
unsigned long lastBroadcast = 0;
|
||||
unsigned long lastLog = 0;
|
||||
|
||||
// ==================== HTTP 핸들러 ====================
|
||||
void handleRoot() {
|
||||
httpServer.send(200, "text/html",
|
||||
"#include \"web_server.cpp\" 의 DASHBOARD_HTML 참조"
|
||||
// 실제로는 webMgr에서 HTML 반환
|
||||
);
|
||||
}
|
||||
|
||||
void handleApiData() {
|
||||
SensorData d = sensors.getData();
|
||||
SystemState s = sensors.getState();
|
||||
String json = "{";
|
||||
json += "\"temp\":" + String(d.temperature, 1) + ",";
|
||||
json += "\"hum\":" + String(d.humidity, 1) + ",";
|
||||
json += "\"soil\":" + String(d.soilMoisture, 1) + ",";
|
||||
json += "\"pumpOn\":" + String(s.pumpOn ? "true" : "false") + ",";
|
||||
json += "\"fanOn\":" + String(s.fanOn ? "true" : "false") + ",";
|
||||
json += "\"autoWater\":" + String(s.autoWaterEnabled ? "true" : "false") + ",";
|
||||
json += "\"tempAlarm\":" + String((int)s.tempAlarm) + ",";
|
||||
json += "\"soilAlarm\":" + String((int)s.soilAlarm);
|
||||
json += "}";
|
||||
httpServer.send(200, "application/json", json);
|
||||
}
|
||||
|
||||
void handleApiHistory() {
|
||||
httpServer.send(200, "application/json", logger.getJsonHistory(60));
|
||||
}
|
||||
|
||||
void handleApiControl() {
|
||||
if (httpServer.hasArg("pump")) {
|
||||
sensors.setPump(httpServer.arg("pump") == "1");
|
||||
}
|
||||
if (httpServer.hasArg("fan")) {
|
||||
sensors.setFan(httpServer.arg("fan") == "1");
|
||||
}
|
||||
if (httpServer.hasArg("auto")) {
|
||||
sensors.setAutoWater(httpServer.arg("auto") == "1");
|
||||
}
|
||||
httpServer.send(200, "application/json", "{\"ok\":true}");
|
||||
}
|
||||
|
||||
// ==================== WiFi 연결 ====================
|
||||
void connectWiFi() {
|
||||
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||
Serial.print("WiFi 연결 중");
|
||||
int attempts = 0;
|
||||
while (WiFi.status() != WL_CONNECTED && attempts < 30) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
digitalWrite(LED_WIFI_PIN, !digitalRead(LED_WIFI_PIN));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
Serial.println("\nWiFi 연결됨!");
|
||||
Serial.print("IP: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
digitalWrite(LED_WIFI_PIN, HIGH);
|
||||
} else {
|
||||
Serial.println("\nWiFi 연결 실패! AP 모드로 전환...");
|
||||
WiFi.softAP("GardenMonitor", "garden1234");
|
||||
Serial.print("AP IP: ");
|
||||
Serial.println(WiFi.softAPIP());
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 설정 ====================
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.println("\n🌿 정원 관리 모니터 시스템 시작");
|
||||
|
||||
pinMode(LED_WIFI_PIN, OUTPUT);
|
||||
pinMode(LED_PUMP_PIN, OUTPUT);
|
||||
|
||||
// 센서 매니저 초기화
|
||||
sensors.begin();
|
||||
Serial.println("센서 초기화 완료");
|
||||
|
||||
// 데이터 로거 초기화
|
||||
logger.begin();
|
||||
Serial.println("로거 초기화 완료");
|
||||
|
||||
// WiFi 연결
|
||||
connectWiFi();
|
||||
|
||||
// 웹 서버 설정
|
||||
httpServer.on("/", handleRoot);
|
||||
httpServer.on("/api/data", handleApiData);
|
||||
httpServer.on("/api/history", handleApiHistory);
|
||||
httpServer.on("/api/control", HTTP_POST, handleApiControl);
|
||||
httpServer.begin();
|
||||
Serial.println("HTTP 서버 시작");
|
||||
|
||||
// WebSocket 서버 시작
|
||||
webMgr.begin();
|
||||
Serial.println("WebSocket 서버 시작 (포트 81)");
|
||||
|
||||
Serial.println("========================================");
|
||||
Serial.println(" 🌿 정원 관리 모니터 준비 완료!");
|
||||
Serial.println(" 대시보드: http://" + WiFi.localIP().toString());
|
||||
Serial.println("========================================");
|
||||
}
|
||||
|
||||
// ==================== 메인 루프 ====================
|
||||
void loop() {
|
||||
unsigned long now = millis();
|
||||
|
||||
// HTTP 서버 처리
|
||||
httpServer.handleClient();
|
||||
|
||||
// WebSocket 처리
|
||||
webMgr.handleClient();
|
||||
|
||||
// 센서 읽기 (5초 간격)
|
||||
if (now - lastSensorRead >= SENSOR_READ_INTERVAL_MS) {
|
||||
lastSensorRead = now;
|
||||
|
||||
if (sensors.readSensors()) {
|
||||
SensorData d = sensors.getData();
|
||||
Serial.printf("온도: %.1f°C | 습도: %.1f%% | 토양: %.1f%% (RAW: %d)\n",
|
||||
d.temperature, d.humidity, d.soilMoisture, (int)d.soilRaw);
|
||||
}
|
||||
}
|
||||
|
||||
// 자동 제어 로직
|
||||
sensors.autoControl();
|
||||
|
||||
// 데이터 로깅 (30초 간격)
|
||||
if (now - lastLog >= 30000) {
|
||||
lastLog = now;
|
||||
logger.log(sensors.getData());
|
||||
}
|
||||
|
||||
// WebSocket 브로드캐스트 (2초 간격)
|
||||
if (now - lastBroadcast >= DASHBOARD_UPDATE_MS) {
|
||||
lastBroadcast = now;
|
||||
webMgr.broadcastData(sensors.getData(), sensors.getState());
|
||||
}
|
||||
|
||||
// 펌프 안전 타임아웃 (1분 이상 작동 시 강제 정지)
|
||||
SystemState st = sensors.getState();
|
||||
if (st.pumpOn && (now - st.pumpStartTime > 60000)) {
|
||||
sensors.setPump(false);
|
||||
Serial.println("⚠ 펌프 안전 타임아웃 - 강제 정지");
|
||||
}
|
||||
|
||||
delay(10); // 와치독 방지
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
#include "sensors.h"
|
||||
#include "config.h"
|
||||
#include <DHT.h>
|
||||
|
||||
static DHT dht(DHT_PIN, DHT_TYPE);
|
||||
|
||||
SensorManager::SensorManager() {
|
||||
_data = {0, 0, 0, 0, false, 0};
|
||||
_state = {false, false, (bool)AUTO_WATER_ENABLED, ALARM_NONE, ALARM_NONE, 0, 0, 0};
|
||||
_soilDryRaw = 4095; // ADC 최대값 (건조)
|
||||
_soilWetRaw = 1500; // ADC 젖은 값 (보정 필요)
|
||||
}
|
||||
|
||||
void SensorManager::begin() {
|
||||
dht.begin();
|
||||
pinMode(SOIL_PIN, INPUT);
|
||||
pinMode(RELAY1_PIN, OUTPUT);
|
||||
pinMode(RELAY2_PIN, OUTPUT);
|
||||
pinMode(LED_PUMP_PIN, OUTPUT);
|
||||
|
||||
// 릴레이 초기 상태 (LOW = OFF for active-high relay)
|
||||
digitalWrite(RELAY1_PIN, LOW);
|
||||
digitalWrite(RELAY2_PIN, LOW);
|
||||
digitalWrite(LED_PUMP_PIN, LOW);
|
||||
}
|
||||
|
||||
bool SensorManager::readSensors() {
|
||||
_data.temperature = dht.readTemperature();
|
||||
_data.humidity = dht.readHumidity();
|
||||
_data.dhtValid = !isnan(_data.temperature) && !isnan(_data.humidity);
|
||||
|
||||
// 토양 습도 읽기 (여러 번 샘플링하여 평균)
|
||||
long soilSum = 0;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
soilSum += analogRead(SOIL_PIN);
|
||||
delay(10);
|
||||
}
|
||||
_data.soilRaw = soilSum / 5.0;
|
||||
_data.soilMoisture = _mapSoilPercent((int)_data.soilRaw);
|
||||
|
||||
_data.timestamp = millis();
|
||||
|
||||
// 경보 상태 업데이트
|
||||
_state.tempAlarm = _checkTempAlarm(_data.temperature);
|
||||
_state.soilAlarm = _checkSoilAlarm(_data.soilMoisture);
|
||||
|
||||
return _data.dhtValid;
|
||||
}
|
||||
|
||||
float SensorManager::readTemperature() {
|
||||
float t = dht.readTemperature();
|
||||
if (!isnan(t)) _data.temperature = t;
|
||||
return _data.temperature;
|
||||
}
|
||||
|
||||
float SensorManager::readHumidity() {
|
||||
float h = dht.readHumidity();
|
||||
if (!isnan(h)) _data.humidity = h;
|
||||
return _data.humidity;
|
||||
}
|
||||
|
||||
float SensorManager::readSoilMoisture() {
|
||||
int raw = analogRead(SOIL_PIN);
|
||||
_data.soilRaw = raw;
|
||||
_data.soilMoisture = _mapSoilPercent(raw);
|
||||
return _data.soilMoisture;
|
||||
}
|
||||
|
||||
void SensorManager::setPump(bool on) {
|
||||
_state.pumpOn = on;
|
||||
digitalWrite(RELAY1_PIN, on ? HIGH : LOW);
|
||||
digitalWrite(LED_PUMP_PIN, on ? HIGH : LOW);
|
||||
if (on) {
|
||||
_state.pumpStartTime = millis();
|
||||
_state.pumpCycleCount++;
|
||||
}
|
||||
}
|
||||
|
||||
void SensorManager::setFan(bool on) {
|
||||
_state.fanOn = on;
|
||||
digitalWrite(RELAY2_PIN, on ? HIGH : LOW);
|
||||
}
|
||||
|
||||
void SensorManager::autoControl() {
|
||||
unsigned long now = millis();
|
||||
|
||||
// 자동 물주기
|
||||
if (_state.autoWaterEnabled && _data.dhtValid) {
|
||||
if (_data.soilMoisture < SOIL_DRY && !_state.pumpOn) {
|
||||
// 쿨다운 확인
|
||||
if (now > _state.pumpCooldownEnd) {
|
||||
setPump(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 펌프 자동 끄기 (시간 초과 시)
|
||||
if (_state.pumpOn) {
|
||||
if (now - _state.pumpStartTime >= PUMP_DURATION_MS) {
|
||||
setPump(false);
|
||||
_state.pumpCooldownEnd = now + PUMP_COOLDOWN_MS;
|
||||
}
|
||||
// 과습 시 즉시 정지
|
||||
if (_data.soilMoisture >= SOIL_WET) {
|
||||
setPump(false);
|
||||
_state.pumpCooldownEnd = now + PUMP_COOLDOWN_MS;
|
||||
}
|
||||
}
|
||||
|
||||
// 팬 자동 제어 (고온 시 가동)
|
||||
if (_data.dhtValid) {
|
||||
if (_data.temperature > TEMP_HIGH_WARNING && !_state.fanOn) {
|
||||
setFan(true);
|
||||
} else if (_data.temperature < TEMP_HIGH_WARNING - 2.0 && _state.fanOn) {
|
||||
setFan(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float SensorManager::_mapSoilPercent(int rawValue) {
|
||||
// ADC 값을 0~100% 습도로 변환
|
||||
// 건조 = 높은 ADC값, 젖은 = 낮은 ADC값 (반비례)
|
||||
float percent = map(rawValue, _soilDryRaw, _soilWetRaw, 0, 100);
|
||||
return constrain(percent, 0.0, 100.0);
|
||||
}
|
||||
|
||||
AlarmLevel SensorManager::_checkTempAlarm(float temp) {
|
||||
if (temp <= TEMP_LOW_ALARM || temp >= TEMP_HIGH_ALARM) return ALARM_CRITICAL;
|
||||
if (temp <= TEMP_LOW_WARNING || temp >= TEMP_HIGH_WARNING) return ALARM_WARNING;
|
||||
return ALARM_NONE;
|
||||
}
|
||||
|
||||
AlarmLevel SensorManager::_checkSoilAlarm(float soil) {
|
||||
if (soil < 15.0) return ALARM_CRITICAL; // 매우 건조
|
||||
if (soil < SOIL_DRY) return ALARM_WARNING;
|
||||
if (soil > 90.0) return ALARM_WARNING; // 과습 주의
|
||||
return ALARM_NONE;
|
||||
}
|
||||
|
||||
void SensorManager::setSoilCalibration(int dryValue, int wetValue) {
|
||||
_soilDryRaw = dryValue;
|
||||
_soilWetRaw = wetValue;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
#ifndef SENSORS_H
|
||||
#define SENSORS_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "config.h"
|
||||
|
||||
// 센서 데이터 구조체
|
||||
struct SensorData {
|
||||
float temperature; // °C
|
||||
float humidity; // %
|
||||
float soilMoisture; // % (0~100 변환)
|
||||
float soilRaw; // 원시 ADC 값
|
||||
bool dhtValid; // DHT 읽기 성공 여부
|
||||
unsigned long timestamp; // millis()
|
||||
};
|
||||
|
||||
// 경보 상태
|
||||
enum AlarmLevel {
|
||||
ALARM_NONE = 0,
|
||||
ALARM_WARNING,
|
||||
ALARM_CRITICAL
|
||||
};
|
||||
|
||||
// 시스템 상태
|
||||
struct SystemState {
|
||||
bool pumpOn; // 펌프 상태
|
||||
bool fanOn; // 팬 상태
|
||||
bool autoWaterEnabled; // 자동 물주기
|
||||
AlarmLevel tempAlarm;
|
||||
AlarmLevel soilAlarm;
|
||||
unsigned long pumpStartTime;
|
||||
unsigned long pumpCooldownEnd;
|
||||
int pumpCycleCount; // 펌프 작동 횟수
|
||||
};
|
||||
|
||||
class SensorManager {
|
||||
public:
|
||||
SensorManager();
|
||||
void begin();
|
||||
bool readSensors();
|
||||
SensorData getData() const { return _data; }
|
||||
SystemState getState() const { return _state; }
|
||||
|
||||
// 개별 센서 읽기
|
||||
float readTemperature();
|
||||
float readHumidity();
|
||||
float readSoilMoisture();
|
||||
|
||||
// 상태 확인
|
||||
bool isPumpRunning() const { return _state.pumpOn; }
|
||||
bool isFanRunning() const { return _state.fanOn; }
|
||||
AlarmLevel getTempAlarm() const { return _state.tempAlarm; }
|
||||
AlarmLevel getSoilAlarm() const { return _state.soilAlarm; }
|
||||
|
||||
// 제어
|
||||
void setPump(bool on);
|
||||
void setFan(bool on);
|
||||
void setAutoWater(bool enabled) { _state.autoWaterEnabled = enabled; }
|
||||
|
||||
// 자동 제어 로직
|
||||
void autoControl();
|
||||
|
||||
// 보정
|
||||
void setSoilCalibration(int dryValue, int wetValue);
|
||||
|
||||
private:
|
||||
SensorData _data;
|
||||
SystemState _state;
|
||||
int _soilDryRaw; // 건조할 때 ADC 값 (보정)
|
||||
int _soilWetRaw; // 젖었을 때 ADC 값 (보정)
|
||||
|
||||
float _mapSoilPercent(int rawValue);
|
||||
AlarmLevel _checkTempAlarm(float temp);
|
||||
AlarmLevel _checkSoilAlarm(float soil);
|
||||
};
|
||||
|
||||
#endif // SENSORS_H
|
||||
@@ -0,0 +1,243 @@
|
||||
#include "web_server.h"
|
||||
#include "config.h"
|
||||
|
||||
// 대시보드 HTML (프로그래밍 메모리에 저장)
|
||||
static const char DASHBOARD_HTML[] PROGMEM = R"rawliteral(
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>🌿 정원 관리 모니터</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Segoe UI', sans-serif; background: #1a1a2e; color: #eee; min-height: 100vh; }
|
||||
.header { background: linear-gradient(135deg, #0f3460, #16213e); padding: 20px; text-align: center; }
|
||||
.header h1 { font-size: 1.8em; }
|
||||
.header .status { font-size: 0.9em; color: #aaa; margin-top: 5px; }
|
||||
.container { max-width: 900px; margin: 0 auto; padding: 15px; }
|
||||
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-top: 15px; }
|
||||
.card { background: #16213e; border-radius: 12px; padding: 20px; border: 1px solid #0f3460; transition: all 0.3s; }
|
||||
.card:hover { border-color: #4ecca3; transform: translateY(-2px); }
|
||||
.card .label { font-size: 0.85em; color: #888; text-transform: uppercase; letter-spacing: 1px; }
|
||||
.card .value { font-size: 2.2em; font-weight: bold; margin: 8px 0; }
|
||||
.card .unit { font-size: 0.9em; color: #aaa; }
|
||||
.card .icon { font-size: 1.5em; }
|
||||
.alarm-none { border-left: 4px solid #4ecca3; }
|
||||
.alarm-warning { border-left: 4px solid #f39c12; }
|
||||
.alarm-critical { border-left: 4px solid #e74c3c; animation: pulse 1s infinite; }
|
||||
@keyframes pulse { 50% { opacity: 0.7; } }
|
||||
.controls { margin-top: 20px; }
|
||||
.btn-group { display: flex; gap: 10px; flex-wrap: wrap; }
|
||||
.btn { padding: 12px 24px; border: none; border-radius: 8px; font-size: 1em; cursor: pointer; transition: all 0.3s; font-weight: 600; }
|
||||
.btn-on { background: #4ecca3; color: #1a1a2e; }
|
||||
.btn-off { background: #e74c3c; color: white; }
|
||||
.btn-auto { background: #3498db; color: white; }
|
||||
.btn:hover { transform: scale(1.05); }
|
||||
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
|
||||
.log { background: #0a0a1a; border-radius: 8px; padding: 15px; margin-top: 15px; max-height: 200px; overflow-y: auto; font-family: monospace; font-size: 0.85em; }
|
||||
.log-entry { padding: 3px 0; border-bottom: 1px solid #1a1a2e; }
|
||||
.log-time { color: #4ecca3; }
|
||||
.gauge-container { position: relative; width: 100%; height: 20px; background: #0a0a1a; border-radius: 10px; margin-top: 8px; overflow: hidden; }
|
||||
.gauge-fill { height: 100%; border-radius: 10px; transition: width 0.5s ease; }
|
||||
.gauge-text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 0.75em; font-weight: bold; }
|
||||
.temp-gauge .gauge-fill { background: linear-gradient(90deg, #3498db, #f39c12, #e74c3c); }
|
||||
.soil-gauge .gauge-fill { background: linear-gradient(90deg, #e74c3c, #4ecca3, #3498db); }
|
||||
.humidity-gauge .gauge-fill { background: linear-gradient(90deg, #f39c12, #4ecca3); }
|
||||
.pump-active { box-shadow: 0 0 20px rgba(78, 204, 163, 0.5); }
|
||||
.camera-section { margin-top: 20px; }
|
||||
.camera-frame { width: 100%; border-radius: 12px; overflow: hidden; background: #000; }
|
||||
.camera-frame img { width: 100%; display: block; }
|
||||
.camera-placeholder { text-align: center; padding: 60px 20px; color: #555; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>🌿 정원 관리 모니터</h1>
|
||||
<div class="status" id="connStatus">연결 중...</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="grid">
|
||||
<div class="card alarm-none" id="tempCard">
|
||||
<div class="label">🌡️ 온도</div>
|
||||
<div class="value" id="tempValue">--</div>
|
||||
<div class="unit">°C</div>
|
||||
<div class="gauge-container temp-gauge">
|
||||
<div class="gauge-fill" id="tempGauge" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card alarm-none" id="humidityCard">
|
||||
<div class="label">💧 습도</div>
|
||||
<div class="value" id="humValue">--</div>
|
||||
<div class="unit">%</div>
|
||||
<div class="gauge-container humidity-gauge">
|
||||
<div class="gauge-fill" id="humGauge" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card alarm-none" id="soilCard">
|
||||
<div class="label">🌱 토양 습도</div>
|
||||
<div class="value" id="soilValue">--</div>
|
||||
<div class="unit">%</div>
|
||||
<div class="gauge-container soil-gauge">
|
||||
<div class="gauge-fill" id="soilGauge" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card" id="pumpCard">
|
||||
<div class="label">🚿 펌프 상태</div>
|
||||
<div class="value" id="pumpStatus">대기</div>
|
||||
<div class="unit" id="pumpInfo">자동 모드</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<h3 style="margin-bottom:10px;">🎮 수동 제어</h3>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-on" id="btnPump" onclick="sendCmd('pump',true)">💧 펌프 켜기</button>
|
||||
<button class="btn btn-off" id="btnPumpOff" onclick="sendCmd('pump',false)">⏹ 펌프 끄기</button>
|
||||
<button class="btn btn-on" id="btnFan" onclick="sendCmd('fan',true)">🌀 팬 켜기</button>
|
||||
<button class="btn btn-off" id="btnFanOff" onclick="sendCmd('fan',false)">⏹ 팬 끄기</button>
|
||||
<button class="btn btn-auto" id="btnAuto" onclick="toggleAuto()">🔄 자동물주기: ON</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="camera-section">
|
||||
<h3 style="margin-bottom:10px;">📷 정원 카메라</h3>
|
||||
<div class="camera-frame" id="cameraFrame">
|
||||
<div class="camera-placeholder">📷 카메라 비활성화<br><small>ESP32-CAM 보드 필요</small></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="log" id="logBox">
|
||||
<div class="log-entry"><span class="log-time">--:--:--</span> 시스템 대기 중</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var ws;
|
||||
var reconnectTimer;
|
||||
function connect() {
|
||||
ws = new WebSocket('ws://' + location.host + ':81');
|
||||
ws.onopen = function() {
|
||||
document.getElementById('connStatus').textContent = '🟢 연결됨';
|
||||
addLog('서버 연결됨');
|
||||
};
|
||||
ws.onmessage = function(evt) {
|
||||
var d = JSON.parse(evt.data);
|
||||
updateDashboard(d);
|
||||
};
|
||||
ws.onclose = function() {
|
||||
document.getElementById('connStatus').textContent = '🔴 연결 끊김 - 재연결 중...';
|
||||
reconnectTimer = setTimeout(connect, 3000);
|
||||
};
|
||||
ws.onerror = function() { ws.close(); };
|
||||
}
|
||||
function updateDashboard(d) {
|
||||
document.getElementById('tempValue').textContent = d.temp.toFixed(1);
|
||||
document.getElementById('humValue').textContent = d.hum.toFixed(1);
|
||||
document.getElementById('soilValue').textContent = d.soil.toFixed(1);
|
||||
document.getElementById('tempGauge').style.width = Math.min(d.temp / 50 * 100, 100) + '%';
|
||||
document.getElementById('humGauge').style.width = d.hum + '%';
|
||||
document.getElementById('soilGauge').style.width = d.soil + '%';
|
||||
setAlarmClass('tempCard', d.tempAlarm);
|
||||
setAlarmClass('soilCard', d.soilAlarm);
|
||||
var pumpEl = document.getElementById('pumpStatus');
|
||||
pumpEl.textContent = d.pumpOn ? '💧 작동 중' : '⏸ 대기';
|
||||
document.getElementById('pumpInfo').textContent = d.autoWater ? '자동 모드' : '수동 모드';
|
||||
document.getElementById('pumpCard').className = 'card' + (d.pumpOn ? ' pump-active' : '');
|
||||
document.getElementById('btnAuto').textContent = '🔄 자동물주기: ' + (d.autoWater ? 'ON' : 'OFF');
|
||||
if (d.camUrl) {
|
||||
document.getElementById('cameraFrame').innerHTML = '<img src="' + d.camUrl + '" alt="정원 카메라">';
|
||||
}
|
||||
}
|
||||
function setAlarmClass(id, level) {
|
||||
var el = document.getElementById(id);
|
||||
el.className = 'card alarm-' + ['none','warning','critical'][level];
|
||||
}
|
||||
function sendCmd(target, value) {
|
||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||
ws.send(JSON.stringify({cmd: target, value: value}));
|
||||
addLog((value?'ON':'OFF') + ' → ' + target);
|
||||
}
|
||||
}
|
||||
function toggleAuto() {
|
||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||
ws.send(JSON.stringify({cmd: 'autoWater', value: true}));
|
||||
}
|
||||
}
|
||||
function addLog(msg) {
|
||||
var now = new Date();
|
||||
var time = now.toTimeString().split(' ')[0];
|
||||
var box = document.getElementById('logBox');
|
||||
var entry = document.createElement('div');
|
||||
entry.className = 'log-entry';
|
||||
entry.innerHTML = '<span class="log-time">' + time + '</span> ' + msg;
|
||||
box.insertBefore(entry, box.firstChild);
|
||||
if (box.children.length > 50) box.removeChild(box.lastChild);
|
||||
}
|
||||
connect();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
)rawliteral";
|
||||
|
||||
WebManager::WebManager(SensorManager& sensors)
|
||||
: _sensors(sensors), _ws(81), _controlCb(nullptr) {}
|
||||
|
||||
void WebManager::begin() {
|
||||
_ws.begin();
|
||||
_ws.onEvent([this](uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
|
||||
_handleWebSocket(num, type, payload, length);
|
||||
});
|
||||
}
|
||||
|
||||
void WebManager::handleClient() {
|
||||
_ws.loop();
|
||||
}
|
||||
|
||||
void WebManager::broadcastData(const SensorData& data, const SystemState& state) {
|
||||
String json = _buildJson(data, state);
|
||||
_ws.broadcastTXT(json);
|
||||
}
|
||||
|
||||
void WebManager::_handleWebSocket(uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
|
||||
if (type == WStype_TEXT) {
|
||||
// JSON 명령 파싱: {"cmd":"pump","value":true}
|
||||
String msg = String((char*)payload);
|
||||
if (msg.indexOf("\"cmd\"") >= 0) {
|
||||
String cmd;
|
||||
bool value = msg.indexOf("true") >= 0;
|
||||
|
||||
if (msg.indexOf("\"pump\"") >= 0) {
|
||||
_sensors.setPump(value);
|
||||
cmd = "pump";
|
||||
} else if (msg.indexOf("\"fan\"") >= 0) {
|
||||
_sensors.setFan(value);
|
||||
cmd = "fan";
|
||||
} else if (msg.indexOf("\"autoWater\"") >= 0) {
|
||||
_sensors.setAutoWater(!_sensors.getState().autoWaterEnabled);
|
||||
cmd = "autoWater";
|
||||
}
|
||||
|
||||
if (_controlCb) _controlCb(cmd, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String WebManager::_buildJson(const SensorData& data, const SystemState& state) {
|
||||
String json = "{";
|
||||
json += "\"temp\":" + String(data.temperature, 1) + ",";
|
||||
json += "\"hum\":" + String(data.humidity, 1) + ",";
|
||||
json += "\"soil\":" + String(data.soilMoisture, 1) + ",";
|
||||
json += "\"soilRaw\":" + String((int)data.soilRaw) + ",";
|
||||
json += "\"pumpOn\":" + String(state.pumpOn ? "true" : "false") + ",";
|
||||
json += "\"fanOn\":" + String(state.fanOn ? "true" : "false") + ",";
|
||||
json += "\"autoWater\":" + String(state.autoWaterEnabled ? "true" : "false") + ",";
|
||||
json += "\"tempAlarm\":" + String((int)state.tempAlarm) + ",";
|
||||
json += "\"soilAlarm\":" + String((int)state.soilAlarm) + ",";
|
||||
json += "\"pumpCycles\":" + String(state.pumpCycleCount);
|
||||
#if CAMERA_ENABLED
|
||||
json += ",\"camUrl\":\"/cam\"";
|
||||
#endif
|
||||
json += "}";
|
||||
return json;
|
||||
}
|
||||
|
||||
String WebManager::_buildHtmlPage() {
|
||||
return String(DASHBOARD_HTML);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef WEB_SERVER_H
|
||||
#define WEB_SERVER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <WebSocketsServer.h>
|
||||
#include "sensors.h"
|
||||
|
||||
class WebManager {
|
||||
public:
|
||||
WebManager(SensorManager& sensors);
|
||||
void begin();
|
||||
void handleClient();
|
||||
void broadcastData(const SensorData& data, const SystemState& state);
|
||||
|
||||
// 수동 제어 콜백
|
||||
typedef void (*ControlCallback)(const String& command, bool value);
|
||||
void setControlCallback(ControlCallback cb) { _controlCb = cb; }
|
||||
|
||||
private:
|
||||
SensorManager& _sensors;
|
||||
WebSocketsServer _ws;
|
||||
ControlCallback _controlCb;
|
||||
|
||||
void _handleWebSocket(uint8_t num, WStype_t type, uint8_t* payload, size_t length);
|
||||
String _buildJson(const SensorData& data, const SystemState& state);
|
||||
String _buildHtmlPage();
|
||||
};
|
||||
|
||||
#endif // WEB_SERVER_H
|
||||
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"version": 1,
|
||||
"author": "Garden Monitor",
|
||||
"editor": "wokwi",
|
||||
"parts": [
|
||||
{ "type": "board-esp32-devkit-v1", "id": "esp", "top": 100, "left": 200, "attrs": {} },
|
||||
{
|
||||
"type": "wokwi-dht22",
|
||||
"id": "dht1",
|
||||
"top": -50,
|
||||
"left": 50,
|
||||
"attrs": { "pin": "27" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-resistor",
|
||||
"id": "r_pullup",
|
||||
"top": -20,
|
||||
"left": 120,
|
||||
"attrs": { "resistance": "10000", "pin1": "3v3", "pin2": "27" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-potentiometer",
|
||||
"id": "soil_sensor",
|
||||
"top": 300,
|
||||
"left": 50,
|
||||
"attrs": { "value": "50", "pin": "34" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-relay-module",
|
||||
"id": "relay1",
|
||||
"top": 300,
|
||||
"left": 350,
|
||||
"attrs": { "pin": "25" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-relay-module",
|
||||
"id": "relay2",
|
||||
"top": 400,
|
||||
"left": 350,
|
||||
"attrs": { "pin": "26" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-led",
|
||||
"id": "led_wifi",
|
||||
"top": 50,
|
||||
"left": 400,
|
||||
"attrs": { "color": "green", "pin": "2" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-led",
|
||||
"id": "led_pump",
|
||||
"top": 80,
|
||||
"left": 400,
|
||||
"attrs": { "color": "blue", "pin": "4" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-text",
|
||||
"id": "label_dht",
|
||||
"top": -80,
|
||||
"left": 30,
|
||||
"attrs": { "text": "DHT22 온습도", "color": "#4ecca3" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-text",
|
||||
"id": "label_soil",
|
||||
"top": 270,
|
||||
"left": 30,
|
||||
"attrs": { "text": "토양 습도 (가변저항)", "color": "#4ecca3" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-text",
|
||||
"id": "label_relay1",
|
||||
"top": 280,
|
||||
"left": 340,
|
||||
"attrs": { "text": "릴레이1: 워터펌프", "color": "#f39c12" }
|
||||
},
|
||||
{
|
||||
"type": "wokwi-text",
|
||||
"id": "label_relay2",
|
||||
"top": 380,
|
||||
"left": 340,
|
||||
"attrs": { "text": "릴레이2: 팬/조명", "color": "#f39c12" }
|
||||
}
|
||||
],
|
||||
"connections": [
|
||||
["esp:27", "dht1:OUT", "green", ["v0"]],
|
||||
["esp:3v3", "dht1:VCC", "red", ["v0"]],
|
||||
["esp:GND", "dht1:GND", "black", ["v0"]],
|
||||
["esp:3v3", "r_pullup:pin1", "red", []],
|
||||
["r_pullup:pin2", "esp:27", "green", []],
|
||||
["esp:34", "soil_sensor:SIG", "orange", ["v0"]],
|
||||
["esp:3v3", "soil_sensor:VCC", "red", ["v0"]],
|
||||
["esp:GND", "soil_sensor:GND", "black", ["v0"]],
|
||||
["esp:25", "relay1:IN", "yellow", ["v0"]],
|
||||
["esp:5V", "relay1:VCC", "red", ["v0"]],
|
||||
["esp:GND", "relay1:GND", "black", ["v0"]],
|
||||
["esp:26", "relay2:IN", "yellow", ["v0"]],
|
||||
["esp:5V", "relay2:VCC", "red", ["v0"]],
|
||||
["esp:GND", "relay2:GND", "black", ["v0"]],
|
||||
["esp:2", "led_wifi:A", "green", ["v0"]],
|
||||
["esp:GND", "led_wifi:C", "black", ["v0"]],
|
||||
["esp:4", "led_pump:A", "blue", ["v0"]],
|
||||
["esp:GND", "led_pump:C", "black", ["v0"]]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,243 @@
|
||||
### **매복된 제1대구치와 안면 및 골격 발달과의 연관성**
|
||||
|
||||
**Zehava Geller Fishman,**a **Avi Leibovich,**a **Heli Rushinek,**b **Roberta Lione,**c **Paola Cozza,**c **Adrian Becker,**a **Stella Chaushu**
|
||||
예루살렘, 이스라엘 및 로마, 이탈리아
|
||||
|
||||
#### **서론**
|
||||
매복된 영구 대구치(infraocclusion)는 일반적으로 **유착(ankylosis)**에 의해 발생하지만, 이에 대한 연구는 아직 부족한 실정이다. **일측성 제1대구치 매복(Unilateral First Molar Infraocclusion, UFMI)**은 국소적인 치조골 발육을 저해하여 비대칭적인 치아궁과 교합을 유발한다. 본 연구는 이러한 영향이 치아 구조를 넘어 **안면 및 골격 비대칭**으로까지 확장되는지를 조사하였다.
|
||||
|
||||
**방법:**
|
||||
UFMI를 가진 연속적으로 모집된 환자들을 연령 및 성별이 일치하는 대조군과 비교하는 **후향적 분석**을 실시하였다. 교합평면 경사(occlusal cant, OC), 턱끝 편위(chin deviation, CD), 평균 수직 비대칭 지수(vertical asymmetry index, VAI), 하악지 길이 차이 비율(ramus length difference ratio, RLD) 및 관절돌기 길이 차이 비율을 평가하였다. 임상적 유의성을 위해 VAI와 RLD 값이 **0.3% 이상**인 환자의 비율을 비교하였으며, 연령 및 악궁(상악/하악)의 영향을 분석하였다.
|
||||
|
||||
**결과:**
|
||||
UFMI 그룹은 29명의 환자(남자 16명, 여자 13명, 평균 연령 13.4 ± 3.8세)로 구성되었다. UFMI 환자는 대조군에 비해 유의하게 더 많은 **CD(59.0% vs 14.0%)**와 **OC(38.0% vs 7.0%)**, 그리고 더 높은 **VAI(3.2% vs 1.0%)**와 **RLD 비율(4.0% vs 2.0%)**을 보였다. VAI가 0.3%를 초과한 경우는 UFMI 환자의 **34.5%**에서 관찰되었으며, 대조군에서는 한 명도 없었다(P<0.001). RLD 비율이 0.3%를 초과한 경우는 UFMI 환자의 **51.7%**에서, 대조군의 **24%**에서 관찰되었다(P = 0.030). UFMI 그룹에서 **CD와 OC의 유병률**은 연령이 증가할수록 유의하게 증가하였으며, **상악 UFMI**가 하악보다 더 큰 영향을 미치는 것으로 나타났다.
|
||||
|
||||
**결론:**
|
||||
UFMI는 **안면 및 골격 비대칭**과 유의한 연관성이 있으며, 특히 **고연령 집단**에서 그 영향이 더 크다. 이러한 결과는 **조기 진단 및 개입**을 통해 안면 성장 및 발달에 미치는 장기적인 영향을 완화할 수 있는 잠재적 중요성을 강조한다.
|
||||
(*Am J Orthod Dentofacial Orthop* 2025;168:46-55)
|
||||
|
||||
#### **본문**
|
||||
|
||||
##### **영구 제1대구치 매복의 정의 및 원인**
|
||||
영구 제1대구치의 **매복(infraocclusion)**은 치아 맹출의 정지로 인해 발생한다.1 이는 맹출 경로상의 **물리적 장애물**, 치아 외상, 감염 또는 유전적 요인에 의해 유발될 수 있으나, **유착(ankylosis)**이 그 병인에서 핵심적인 역할을 한다.1
|
||||
|
||||
**유착(ankylosis)**은 치아가 주변 골과 **융합**되어 움직이지 않게 되는 상태로,2 정상적으로 치아를 골에 부착시키는 **치주인대**가 골 조직으로 대체되면서 치아와 골 사이에 직접적인 연결이 형성된다. 이로 인해 정상적인 치아 맹출과 교합 발육이 저해되며,3 그 결과 **매복(infraocclusion)** 또는 **침하(submergence)**가 발생한다. 이때 해당 치아는 주변 치아보다 낮은 위치에 자리하게 된다.4-6
|
||||
|
||||
##### **유착의 발생 및 유병률**
|
||||
유착은 **유치열과 영구치열** 모두에서 발생할 수 있으며, **하악**에서 상악보다 **두 배** 더 흔하게 나타난다.2 가장 흔히 영향을 받는 치아는 **유구치**로, 연구자에 따라 정의가 다름에 따라 유병률은 **1%에서 30%**까지 다양하다.7,8 영구치열에서의 유병률에 대한 자료는 부족하지만, 유치열보다 약 **10배 낮을 것**으로 추정되며, 가장 흔히 영향을 받는 치아는 **영구 대구치**이다.2,3,9
|
||||
|
||||
##### **유착의 원인**
|
||||
유착의 원인은 아직 완전히 밝혀지지 않았지만, 여러 이론과 기전이 제시되어 왔다.2,3,9-11 이는 다음과 같다:
|
||||
- 국소적인 **골 및 치주인대 대사 장애**
|
||||
- **맹출력 저하**
|
||||
- **국소 감염**
|
||||
- 화학적 또는 열적 손상
|
||||
- **국소 외상**
|
||||
- 부적절한 **혀 압력**
|
||||
|
||||
또한 **명확한 유전적 영향**도 보고되었으며,8,10,12,13 유착의 원인은 **내인성 및 외인성 요인**을 모두 포함하는 다양성을 지닌다.
|
||||
|
||||
##### **진단 방법**
|
||||
진단은 **임상 검사**와 **방사선 영상**을 통해 이루어진다.1,14-16 임상적으로 유착된 치아는 일반적으로 **매복**되어 있으며, **타진 시 둔탁한 소리**를 낸다. 그러나 **확진**은 해당 치아를 발치한 후 **조직학적 검사**를 통해서만 가능하다.14 따라서 조직학적으로 증명되지 않는 한, 이러한 치아에 대한 가장 적절한 임상 용어는 **매복(infraocclusion)**이다.
|
||||
|
||||
##### **매복 대구치의 영향**
|
||||
대구치 매복은 **국소적인 부정교합**을 유발할 수 있으며, 인접 치아가 영향을 받은 치아 쪽으로 **기울어질 수 있다**.3,4,17 이는 동일한 치아궁 내 다른 치아에도 영향을 미쳐, **정중선이 영향을 받은 치아 쪽으로 편위**되고, 인접한 원심 대구치는 더 원심位に 위치하게 된다.6 또한 **반대측 치아궁**도 영향을 받을 수 있는데, 이는 상대 치아가 **과맹출**되는 경향이 있기 때문이다.5
|
||||
|
||||
더 넓은 영향으로는 **치조골의 발육 부전**으로 인해 골 높이가 감소하고, **교합평면이 영향을 받은 측으로 경사**지게 된다.3,9,18-20
|
||||
|
||||
##### **유치 vs 영구치 유착의 차이**
|
||||
유착된 **유치**와 **영구치**의 영향은 크게 다르다. 대부분의 매복된 유구치는 영구치가 맹출하는 동안 **정상적으로 탈락**하며, 골 수준도 정상화된다.21,22 반면, **영구 대구치**가 성장 중에 유착되면 **뚜렷한 수직적 결손**이 발생할 수 있다.18 결손의 정도는 환자의 **잔여 성장량**에 따라 달라지며,19 유착이 치아 맹출 초기에 발생하고 환자에게 예상되는 성장이 남아 있을 경우, 그 영향은 더 심해지고 **예후는 악화**된다. 이는 영향을 받은 치아가 인접한 맹출 치아에 비해 상대적으로 더 침하되고, 잔여 성장 기간 동안 **골 수준의 불일치가 빠르게 증가**하기 때문이다.11,18
|
||||
|
||||
##### **안면 및 골격 성장과의 연관성**
|
||||
문헌에서는 명시적으로 언급되지 않았지만, **심한 일측성 유착 및 매복**으로 인한 비대칭적인 치조골 발육 장애가 **안면 및 골격 성장**에도 영향을 미칠 수 있을 것으로 추정된다. 따라서 본 연구의 목적은 **일측성 영구 제1대구치 매복(UFMI)**이 골격 또는 안면 비대칭과 연관성이 있는지를 조사하는 것이다.
|
||||
|
||||
#### **재료 및 방법**
|
||||
본 연구는 예루살렘 히브리대학교 하다사 치의학대학 교정과에서 **연속적으로 모집된 UFMI 환자**의 치료 전 기록을 대상으로 한 **후향적 분석**이다. 이 연구는 하다사 의료기관 연구윤리위원회의 승인을 받았다(HMO-0131-22).
|
||||
|
||||
##### **포함 기준**
|
||||
- **연구 그룹:** 파노라마 방사선 영상에서 임상 및 방사선학적 평가로 **UFMI로 진단된 건강한 피험자**
|
||||
- **대조군:** 정상적으로 맹출된 대구치를 가지며 **대칭적인 I급 또는 II급 부정교합**을 가진 건강한 피험자
|
||||
|
||||
##### **제외 기준**
|
||||
- **양 그룹:** 치아 교차교합으로 인한 **기능적 편위(functional shift)**를 가진 피험자
|
||||
- **UFMI 그룹:** 맹출 실패의 원인이 **유발성 맹출 실패, 낭종, 치아종, 기타 맹출 경로상의 장애물, 두개안면 증후군, 구순구개열, 또는 정형외과 수술을 요하는 심한 부정교합**인 환자
|
||||
|
||||
##### **측정 방법**
|
||||
모든 측정은 저자 중 한 명(Z.G.F.)이 수행하였으며, 무작위로 선택된 8명의 환자에 대해 **2주 이상의 간격**을 두고 두 번 평가하였고, 다른 검사자(A.L.)가 재평가를 실시하였다. **재현성 및 정확성**을 평가하기 위해 **급내상관계수(intraclass correlation coefficients)**를 사용하였다.
|
||||
|
||||
안면 및 치아치조골 비대칭은 다음과 같이 **임상 및 방사선학적으로 평가**하였다:
|
||||
|
||||
1. **정면 안면 사진 검사(Fig 1, A):**
|
||||
- (1) **교합평면 경사(OC):** 교합평면과 동공간 선(interpupillary line)의 평행성을 평가
|
||||
- (2) **턱끝 편위(CD):** 연조직 menton(Me)의 위치를 안면 정중선(facial vertical midline)과 비교하여 평가
|
||||
- (3) **수직 비대칭 지수(VAI):** 오른쪽과 왼쪽 연조직 하악각(soft-tissue gonial angle)의 수직 길이를 비교하여 계산
|
||||
**VAI (%) = ([오른쪽 수직 하악각 길이 - 왼쪽 수직 하악각 길이] / [오른쪽과 왼쪽 길이의 평균]) × 100**
|
||||
|
||||
2. **파노라마 방사선 검사(Fig 1, B):**
|
||||
- (1) **하악지 길이 차이 비율(RLD):** 오른쪽과 왼쪽 하악지-관절돌기 단위 높이의 비율 계산24
|
||||
- (2) **관절돌기 길이 차이 비율(CLD):** 오른쪽과 왼쪽 관절돌기 높이의 비율 계산25
|
||||
|
||||
##### **연령 및 악궁별 분석**
|
||||
- **연령 영향 분석:** 실험군을 **중앙값을 기준으로 두 그룹(9-13세, 13-27세)**으로 나누어 분석
|
||||
- **악궁 영향 분석:** 상악 UFMI와 하악 UFMI 환자 간의 비대칭 비교
|
||||
|
||||
##### **통계 분석**
|
||||
- **연속 변수 비교:** Wilcoxon 부호순위 검정(대응 표본), Mann-Whitney 검정(비대응 표본)
|
||||
- **이분형 변수 분석:** 카이제곱 검정
|
||||
- **상관성 분석:** Spearman 상관계수, 점-이연 상관(point-biserial correlation)
|
||||
- **유의수준:** P < 0.05
|
||||
|
||||
#### **결과**
|
||||
- **검사자 내 신뢰도(intraexaminer):** 0.962 (높은 신뢰도)
|
||||
- **검사자 간 신뢰도(interexaminer):** 0.917 (높은 신뢰도)
|
||||
|
||||
**UFMI 그룹**은 29명의 환자(남자 16명, 여자 13명, 평균 연령 13.5세, 범위 9-27세)로 구성되었다(Table I). **연소그룹(9-13세)**은 14명(평균 연령 10.8세), **연장그룹(13-27세)**은 15명(평균 연령 15.8세)으로 분류되었다(Table I). 대조군은 연령, 성별, 전반적인 부정교합 및 중증도를 일치시켰다.
|
||||
|
||||
**가장 흔히 영향을 받은 대구치**는 **하악 좌측 제1대구치**로, 전체 UFMI의 **59%**를 차지하였다.
|
||||
|
||||
UFMI 그룹은 대조군에 비해 **턱끝 편위(CD)**의 유병률이 유의하게 높았다(59% vs 14%, P<0.001; Table II). 또한 **교합평면 경사(OC)**와 **수직 비대칭 지수(VAI)**, **하악지 길이 차이 비율(RLD)**도 유의하게 높았다. 특히 **VAI ≥ 0.3%**인 경우는 UFMI 환자의 **34.5%**에서 관찰되었으며, 대조군에서는 한 명도 없었다(P<0.001). **RLD ≥ 0.3%**인 경우는 UFMI 환자의 **51.7%**에서, 대조군의 **24%**에서 관찰되었다(P = 0.030).
|
||||
|
||||
**연령이 증가할수록** CD와 OC의 유병률이 유의하게 증가하였으며, **상악 UFMI**가 하악보다 더 큰 영향을 미치는 것으로 나타났다.
|
||||
|
||||
### **표 1. 환자 특성**
|
||||
|
||||
| 그룹 | n | 평균 연령 (범위), 세 |
|
||||
|------|---|---------------------|
|
||||
| **UFMI** | 29 | 13.5 (9.0–27.0) |
|
||||
| - 13세 이상 | 15 | 15.9 (13.0–27.0) |
|
||||
| - 13세 미만 | 14 | 10.7 (9.0–12.9) |
|
||||
| **대조군** | 29 | 13.4 (9–27) |
|
||||
| - 13세 이상 | 15 | 15.8 (13–27) |
|
||||
| - 13세 미만 | 14 | 10.8 (9–12.9) |
|
||||
|
||||
| 그룹 | 남성, n | 여성, n |
|
||||
|------|--------|--------|
|
||||
| **UFMI** | 16 | 13 |
|
||||
| - 13세 이상 | 10 | 5 |
|
||||
| - 13세 미만 | 6 | 8 |
|
||||
| **대조군** | 16 | 13 |
|
||||
| - 13세 이상 | 10 | 5 |
|
||||
| - 13세 미만 | 6 | 8 |
|
||||
|
||||
**저교합 대구치 위치 (n)**
|
||||
- 상악: 12
|
||||
- 하악: 17
|
||||
- 우측: 12
|
||||
- 좌측: 17
|
||||
|
||||
### **표 2. UFMI군과 대조군 비교**
|
||||
|
||||
| 변수 | 대조군, % | UFMI군, % | P 값 |
|
||||
|------|----------|----------|------|
|
||||
| **OC (교합평면 경사)** | 6.88% | 37.92% | 0.005 |
|
||||
| **CD (턱 편위)** | 13.78% | 58.62% | <0.001 |
|
||||
| **VAI (수직 비대칭 지수)** | 1.01 ± 0.68 | 3.23 ± 2.67 | <0.001 |
|
||||
| **RLD (하악지 길이 차이 비율)** | 1.96 ± 1.50 | 4.26 ± 4.30 | 0.003 |
|
||||
| **CLD (관절 길이 차이 비율)** | 5.68 ± 3.55 | 6.01 ± 4.08 | 0.900 |
|
||||
|
||||
UFMI군에서는 대조군에 비해 **교합평면 경사(OC)**의 유병률이 유의미하게 높았습니다(각각 38% vs 7%, P = 0.005, 표 2). 또한 **수직 비대칭 지수(VAI)** 평균도 대조군에 비해 유의하게 높았습니다(각각 3% vs 1%, P < 0.001, 표 2).
|
||||
UFMI군에서 **하악지 길이 차이 비율(RLD)**도 대조군에 비해 유의하게 높았으며, 평균 4%로 대조군의 2%보다 높았습니다(P = 0.003, 표 2). 반면 **관절 길이 차이 비율(CLD)**는 두 군 간에 유의한 차이가 없었으며, 모두 6%로 나타났습니다(표 2).
|
||||
|
||||
### **연령별 하위 그룹 비교 (UFMI vs 대조군)**
|
||||
|
||||
#### **13세 이상 그룹**
|
||||
| 변수 | 대조군, % | UFMI군, % | P 값 |
|
||||
|------|----------|----------|------|
|
||||
| **OC** | 0.00 | 62.50 | <0.001* |
|
||||
| **CD** | 6.67 | 62.50 | 0.001* |
|
||||
| **VAI** | 1.04 ± 0.66 | 3.55 ± 3.49 | 0.029* |
|
||||
| **RLD** | 2.61 ± 1.64 | 4.20 ± 5.10 | 0.260 |
|
||||
|
||||
#### **13세 미만 그룹**
|
||||
| 변수 | 대조군, % | UFMI군, % | P 값 |
|
||||
|------|----------|----------|------|
|
||||
| **OC** | 14.29 | 7.69 | 0.580 |
|
||||
| **CD** | 21.43 | 53.85 | 0.040* |
|
||||
| **VAI** | 0.98 ± 0.70 | 3.10 ± 1.60 | <0.001* |
|
||||
| **RLD** | 1.26 ± 0.95 | 4.32 ± 3.48 | 0.004* |
|
||||
|
||||
13세 미만 UFMI군에서 **턱 편위(CD)** 유병률이 연령대별 대조군보다 높았습니다(각각 54% vs 21%, P = 0.04, 표 3). 마찬가지로 13세 이상 UFMI군에서도 대조군에 비해 **CD** 유병률이 유의하게 높았습니다(각각 63% vs 7%, P = 0.001, 표 3). 대조군에서는 연령이 증가할수록 **CD** 유병률이 감소한 반면(13세 미만 21%, 13세 이상 7%), UFMI군에서는 유의하게 증가했습니다(54%에서 63%, P = 0.006, 그림 2).
|
||||
|
||||
**교합평면 경사(OC)** 유병률은 13세 미만 UFMI군에서 8%, 대조군에서 14%로 통계적으로 유의한 차이는 없었습니다. 그러나 13세 이상 그룹에서는 UFMI군의 62.5%가 **OC**를 보인 반면, 대조군에서는 0%로 유의한 차이가 관찰되었습니다(P = 0.0002). 대조군에서는 연령에 따른 **OC** 유병률 차이가 없었으나, UFMI군에서는 13세 미만 그룹의 8%에 비해 13세 이상 그룹에서 62.5%로 유의한 차이가 있었습니다(P = 0.006, 그림 2B).
|
||||
|
||||
**수직 비대칭 지수(VAI)**는 모든 연령대에서 UFMI군이 대조군보다 유의하게 높았습니다(표 3). 13세 미만 UFMI군에서는 대조군보다 **VAI**가 2% 높았으며(각각 3% vs 1%, P < 0.001), 13세 이상 그룹에서도 UFMI군이 대조군보다 2.5% 높았습니다(각각 3.5% vs 1%, P = 0.029). 반면 **하악지 길이 차이 비율(RLD)**는 13세 미만 그룹에서만 유의한 차이가 관찰되었습니다(각각 4% vs 1%, P = 0.004, 표 3).
|
||||
|
||||
### **상악과 하악 저교합 치아 비교**
|
||||
|
||||
| 변수 | 상악, % | 하악, % | P 값 |
|
||||
|------|--------|--------|------|
|
||||
| **OC** | 33 | 41 | 0.660 |
|
||||
| **CD** | 66 | 53 | 0.450 |
|
||||
| **VAI** | 4.37 ± 3.54 | 2.41 ± 1.49 | 0.086 |
|
||||
| **RLD** | 5.16 ± 5.58 | 3.63 ± 3.26 | 0.580 |
|
||||
| **CLD** | 7.49 ± 4.37 | 4.97 ± 3.64 | 0.043* |
|
||||
|
||||
**VAI, RLD, CLD**는 하악보다 상악에서 더 높은 값을 보였으나, **관절 길이 차이 비율(CLD)**만 통계적으로 유의한 차이를 보였습니다(각각 7% vs 5%, P = 0.04, 표 4). **OC**와 **CD** 유병률에서는 유의한 차이가 없었습니다(표 4).
|
||||
|
||||
### **임상적 유의성 기준(3%) 비교**
|
||||
|
||||
임상적 유의성을 평가하기 위해 **VAI**와 **RLD** 측정값에 대해 3%의 임계값을 설정했습니다(Habets et al26 및 Nicot et al25 참조). Habets et al26은 파노라마 영상 촬영 시 머리 위치 1cm 변화가 좌우 관절 크기 측정값에서 최대 6% 차이를 유발할 수 있으며, 이는 비대칭 지수로 환산 시 3%에 해당한다고 보고했습니다. 따라서 3% 이하의 비대칭 값은 영상 촬영 시 기술적 오류로 간주될 수 있으며, 본 연구에서는 이 임계값을 기준으로 결과를 분석했습니다(표 5).
|
||||
|
||||
| 변수 | 대조군, % | UFMI군, % | P 값 |
|
||||
|------|----------|----------|------|
|
||||
| **전체** | | | |
|
||||
| - VAI ≥ 3% | 0 | 34.5 | <0.001* |
|
||||
| - RLD ≥ 3% | 24.0 | 51.7 | 0.030* |
|
||||
| **13세 이상** | | | |
|
||||
| - VAI ≥ 3% | 0 | 25.0 | 0.038* |
|
||||
| - RLD ≥ 3% | 40.0 | 56.0 | 0.290 |
|
||||
| **13세 미만** | | | |
|
||||
| - VAI ≥ 3% | 0 | 46.0 | 0.003* |
|
||||
| - RLD ≥ 3% | 7.0 | 46.0 | 0.016* |
|
||||
|
||||
대조군에서는 **VAI**가 3%를 초과한 경우가 없었으나, UFMI군의 35%는 **VAI**가 3%를 초과했습니다(P < 0.001, 표 5). 연령별 하위 그룹에서도 유의한 차이가 관찰되었습니다(표 5).
|
||||
|
||||
**RLD**의 경우, 대조군에서도 3%를 초과하는 경우가 있었으나, UFMI군에서 **RLD**가 3%를 초과한 비율이 유의하게 높았습니다(각각 52% vs 24%, P = 0.030, 표 5). 흥미롭게도 대조군에서는 연령이 증가할수록 **RLD ≥ 3%**의 비율이 증가한 반면(그림 3A), UFMI군에서는 연령별 차이가 유의하지 않았습니다(그림 3B). 그 결과, UFMI군과 대조군 간의 유의한 차이는 13세 미만 그룹에서만 관찰되었습니다(각각 46% vs 7%, P = 0.016, 표 5).
|
||||
|
||||
### **초기 분석: 연령에 관계없는 전체 그룹 비교 (그림 4)**
|
||||
|
||||
대조군에서는 **VAI**와 **RLD** 간에 중간 정도의 유의미한 양의 상관관계(0.42, P = 0.024, 그림 4A)가 관찰되었으며, **RLD**와 연령 간에도 유의미한 양의 상관관계(0.48, P = 0.008, 그림 4A)가 있었습니다. 그러나 **OC** 또는 **CD**와 다른 변수들 간의 유의미한 상관관계는 발견되지 않았습니다(그림 4A).
|
||||
|
||||
반면 UFMI군에서는 **OC** 유병률과 연령 간(0.43, P = 0.019), 그리고 **OC**와 **CD** 간(0.51, P = 0.004)에 유의미한 중간 정도의 양의 상관관계가 관찰되었습니다(그림 4B). 또한 **CD**와 **RLD** 간에도 유의미한 양의 상관관계(0.38, P = 0.039)가 있었습니다(그림 4B).
|
||||
|
||||
### **연령이 상관관계에 미치는 영향**
|
||||
|
||||
13세 이상 그룹에서는 대조군에서 **RLD**와 **VAI** 간에 유의미한 중간 정도의 양의 상관관계(0.62, P = 0.015, 그림 4C)가 관찰되었으며, UFMI군에서는 **CD**와 **OC** 간(0.73, P = 0.008, 그림 4D), 그리고 **VAI**와 **RLD** 간(0.53, P = 0.037, 그림 4D)에 유의미한 양의 상관관계가 있었습니다. 반면, 13세 미만 그룹에서는 대조군과 UFMI군 모두에서 연령과 관련된 유의미한 상관관계는 발견되지 않았습니다(그림 4E, F).
|
||||
|
||||
### **고찰**
|
||||
|
||||
본 연구는 일측성 영구 제1대구치 저교합(UFMI)으로 인해 맹출되지 않은 비교적 많은 수의 환자를 대상으로 진행되었습니다. 이는 아마도 치아 유합(ankylosis)에 기인한 것으로 보입니다. 표본 분포는 하악에 더 많은 경우가 관찰되었으며, 이는 저교합 유구치의 분포와 유사합니다.7,27 또한 좌측 편중 현상이 관찰되었으며, 이는 치아 전위,28,29 매복 구개견치,30 상악 측절치 결손,31 원추형 상악 측절치,32 구순구개열 및 측방 안면 열과 같은 다른 치아 이상에서도 보고된 바 있습니다.33
|
||||
|
||||
연구 결과는 정상적으로 맹출된 대구치를 가진 연령 및 성별이 일치하는 대조군과 비교했을 때, UFMI 환자에서 안면 및 골격 비대칭의 유병률이 유의미하게 증가했음을 명확히 보여줍니다. 또한 이러한 비대칭은 연령이 증가할수록 더욱 심해졌습니다(그림 5). 우리가 아는 한, 대구치 저교합이 안면 및 골격 발육에 미치는 이러한 광범위한 영향은 지금까지 보고된 적이 없습니다.
|
||||
|
||||
이러한 현상에 대한 가능한 설명은 치아 맹출이 안면 발육에 미치는 영향을 이해하는 데 있습니다. 성장 중인 개체에서 대구치가 맹출되지 않고 저교합 상태로 남아 있으면 주변 골격의 발육과 정상적인 수직 골격 성장이 저해됩니다.5,20 유구치 저교합과 하악 성장 간의 상관관계는 Leonardi et al34과 Lanteri et al35에 의해 이전에 보고된 바 있습니다. 그러나 이러한 상관관계가 사실이라 하더라도, 유구치가 탈락하고 후속 영구치가 맹출되면 그 영향은 일시적이며 해결됩니다.21,22 반면, 영구치에서 일측성 대구치 저교합이 발생하면 턱의 양측 발육 불균형과 영구적인 비대칭을 초래할 수 있습니다. 저교합된 대구치와 주변 발육 부진한 치조골에 적응하기 위해 턱이 이동하면서 불균형한 교합에 적응하기 위한 보상 변화가 발생하고, 이는 결국 근육에도 영향을 미치게 됩니다.
|
||||
|
||||
UFMI군에서 **VAI(수직 비대칭 지수)** 값이 대조군보다 유의미하게 높았습니다(표 2). 이러한 경향은 두 연령 하위 그룹에서도 동일하게 관찰되었습니다(표 3).
|
||||
|
||||
임상적 관련성을 평가하기 위해 3%의 차이 임계값을 설정했을 때,25 UFMI군의 3분의 1 이상에서 **VAI**가 3%를 초과한 반면, 대조군에서는 한 명도 없었기 때문에 그룹 간의 차이가 더욱 두드러졌습니다(표 5). 또한 두 UFMI 연령 하위 그룹에서도 **VAI ≥ 3%**가 관찰되었습니다(표 5). 이러한 결과는 **VAI ≥ 3%**가 비대칭 안면 발육의 조기 진단 도구로 활용될 수 있음을 시사합니다. **VAI**와 유사하게, **RLD(하악지 길이 차이 비율)**도 UFMI군에서 대조군보다 유의미하게 높았습니다(표 2). 그러나 연령을 고려했을 때, 통계적으로 유의미한 **RLD** 차이는 13세 미만 그룹에서만 관찰되었습니다(표 3). **RLD ≥ 3%**에서도 유사한 패턴이 관찰되었으며(표 5), 이는 **RLD ≥ 3%**가 젊은 환자에서 비대칭을 감지하는 도구로 사용될 수 있음을 시사합니다(표 3, 5).
|
||||
|
||||
**OC(교합평면 경사)**와 **CD(턱 편위)**는 비대칭이 진행되는 중요한 임상적 징후입니다. UFMI 환자에서 **CD**와 **OC**의 유병률이 대조군보다 유의미하게 높았습니다. 흥미롭게도, 젊은 대조군에서도 **OC** 또는 **CD**를 보이는 환자가 있었으나, 연령이 높은 대조군에서는 **OC**가 전혀 관찰되지 않았고 **CD** 유병률도 낮았습니다. 이는 혼합 치아기에서 영구 치아기로 전환되는 동안 **OC**와 **CD**가 일시적으로 나타났다가 영구 치아기에는 해결
|
||||
|
||||
이 연구 데이터를 기반으로 **CD(관절돌기 비대칭)와 OC(교합평면 경사)**는 향후 발생할 수 있는 비대칭을 예측하는 유용한 지표로 활용될 수 있습니다. 특히 **CD는 안면 비대칭 평가에 가장 큰 영향을 미치는 것으로 확인되었습니다**²³. 이러한 지표들이 뚜렷하게 나타나면, 비대칭의 교정 치료가 어려워질 수 있다는 점을 이해하는 것이 중요합니다.
|
||||
|
||||
본 연구 결과는 **치료 시기의 결정**에 중요한 의미를 지닙니다. 연령이 증가함에 따라 **OC와 CD의 유병률이 중간 정도지만 유의미하게 증가**하며, 특히 고연령의 UFMI 그룹에서 **OC와 CD 간 강한 양의 상관관계**가 관찰되었습니다. 이는 **대구치 불완전 매복의 적시 진단이 얼마나 중요한지**를 강조합니다.
|
||||
|
||||
**조기 개입**은 치열궁의 균형을 회복하고, 원치 않는 치조골 및 골격 비대칭의 발전을 예방하는 데 도움이 될 수 있습니다. 비대칭이 이미 발생한 경우에도, 조기 치료를 통해 잔여 성장 잠재력을 활용하여 치조골 발육과 대칭적인 골격 성장을 촉진할 수 있습니다. 반면, **진단이 늦어지면** 교정 치료만으로는 비대칭을 교정하기 어려울 수 있으며, 심지어 불가능할 수도 있습니다. 이러한 경우, 치료 결과가 타협될 수밖에 없거나, 비대칭을 외과적 방법으로 교정해야 할 수도 있습니다. 이러한 한계점은 **치료 시작 시 치료자가 반드시 이해하고**, 환자와 보호자에게 설명하여 대칭적인 결과를 얻지 못할 경우 발생할 수 있는 좌절감을 예방해야 합니다.
|
||||
|
||||
본 연구에는 결과 해석 시 고려해야 할 몇 가지 제한점이 있습니다. 첫째, **이 질환의 희귀성**으로 인해 후향적 연구 설계와 편의 표본을 사용하였기 때문에 선택 편향이 발생할 수 있습니다. 또한, 참가자의 연령 범위(9~27세)가 넓어 아동, 청소년, 성인을 모두 포함하고 있어, 다양한 발달 단계에 따른 결과 해석이 복잡할 수 있습니다. 마지막으로, **현지 보건 규제**로 인해 원뿔빔 전산화 단층촬영(CBCT)과 같은 고급 영상 기법을 사용하지 못했으며, 이는 비대칭 측정에 더 정확한 데이터를 제공할 수 있었을 것입니다. 그럼에도 불구하고, 파노라마 엑스레이는 비대칭 평가에 신뢰할 수 있는 도구로 입증되었습니다²⁵,²⁶. 이는 왜곡이 주로 **수직 차원보다 수평 차원에서 발생**하기 때문입니다³⁶,³⁷.
|
||||
|
||||
### **결론**
|
||||
본 연구는 **UFMI(불완전 매복 대구치)가 안면 및 골격 비대칭과 관련이 있음**을 밝혔습니다.
|
||||
|
||||
1. **UFMI와 관련된 안면 및 골격 비대칭은 연령이 증가할수록 악화됩니다**. 따라서 **조기 진단이 매우 중요**하며, 이를 통해 원치 않는 영향을 예방하고 대칭적인 성장을 유도하기 위한 교정 치료를 시작할 수 있습니다. **소아치과 의사**는 이러한 환자들을 가장 먼저 접하는 전문가로서, **불완전 매복의 초기 징후와 그 골격적 영향**을 인식해야 합니다.
|
||||
|
||||
2. **UFMI 진단이 늦어져 비대칭이 이미 발생한 경우**, 치료 결과의 타협이 불가피하며, 이는 환자와 반드시 공유해야 합니다. 또는 **골격적 고정 장치를 사용하거나 악교정 수술**과 같은 더 복잡한 접근법을 고려해야 할 수도 있습니다.
|
||||
|
||||
### **저자 기여 내역**
|
||||
- **Zehava Geller Fishman**: 방법론, 조사, 검증, 원고 검토 및 편집
|
||||
- **Avi Leibovich**: 방법론, 조사, 검증, 원고 검토 및 편집, 형식 분석
|
||||
- **Heli Rushinek**: 개념화, 방법론, 조사
|
||||
- **Roberta Lione**: 조사
|
||||
- **Paola Cozza**: 조사
|
||||
- **Adrian Becker**: 방법론, 초안 작성
|
||||
- **Stella Chaushu**: 개념화, 방법론, 조사, 검증, 원고 검토 및 편집, 감독, 프로젝트 관리, 형식 분석
|
||||
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>infraoccluded_first_permanent_molars_and - 다운로드</title>
|
||||
<style>
|
||||
body { font-family: 'Malgun Gothic', sans-serif; max-width: 600px; margin: 60px auto; padding: 20px; text-align: center; background: #f8f9fa; }
|
||||
.card { background: white; border-radius: 12px; padding: 40px 30px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }
|
||||
h1 { color: #1a1a2e; font-size: 24px; margin-bottom: 10px; }
|
||||
p { color: #5f6f86; margin-bottom: 30px; }
|
||||
.btn { display: inline-block; background: #1668e3; color: white; text-decoration: none; padding: 14px 36px; border-radius: 8px; font-size: 16px; font-weight: bold; transition: background 0.2s; }
|
||||
.btn:hover { background: #1255bb; }
|
||||
.meta { margin-top: 20px; font-size: 12px; color: #888; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
<h1>infraoccluded_first_permanent_molars_and</h1>
|
||||
<p>슬라이드 12장이 준비되었습니다.</p>
|
||||
<a class="btn" href="infraoccluded_first_permanent_molars_and.pptx" download>프레젠테이션 다운로드</a>
|
||||
<div class="meta">/home/kim/homeclaw/.smallclaw/users/papa/workspace/infraoccluded_first_permanent_molars_and/infraoccluded_first_permanent_molars_and.pptx</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
{"project":"UFMI_이미지_중심_발표","template":"creative","background":"cream","source_files":["uploads/UPL_infraoccluded first permanent molars and their association with facial and skeletal development_1780321626649.pdf","uploads"],"slides":[{"type":"title","title":"단측성 제1대구치 함입증(UFMI)과 안면 및 골격 발달의 연관성","subtitle":"이미지를 통한 시각적 분석","background":"cream"},{"type":"image","title":"UFMI의 정의 및 임상 증상","image_url":"/api/files/uploads/capture_1780406827738_p2.png","layout":"fullscreen"},{"type":"image","title":"UFMI 환자의 교합 상태 (1)","image_url":"/api/files/uploads/capture_1780406848679_p3.png","layout":"fullscreen"},{"type":"image","title":"UFMI 환자의 교합 상태 (2)","image_url":"/api/files/uploads/capture_1780406858555_p3.png","layout":"fullscreen"},{"type":"image","title":"UFMI 환자의 안면 비대칭 (1)","image_url":"/api/files/uploads/capture_1780406876332_p3.png","layout":"fullscreen"},{"type":"image","title":"연구 방법: 평가 지표","image_url":"/api/files/uploads/capture_1780406887639_p4.png","layout":"fullscreen"},{"type":"image","title":"UFMI 환자의 안면 비대칭 (2)","image_url":"/api/files/uploads/capture_1780406893521_p4.png","layout":"fullscreen"},{"type":"image","title":"하악골 길이 차이 분석","image_url":"/api/files/uploads/capture_1780406899545_p4.png","layout":"fullscreen"},{"type":"image","title":"연령 및 악궁 위치별 영향","image_url":"/api/files/uploads/capture_1780406909392_p5.png","layout":"fullscreen"},{"type":"image","title":"3D 이미지를 통한 골격 변화 분석","image_url":"/api/files/uploads/capture_1780406919021_p6.png","layout":"fullscreen"},{"type":"image","title":"CBCT를 활용한 하악지 및 관절돌기 길이 측정","image_url":"/api/files/uploads/capture_1780406930069_p7.png","layout":"fullscreen"},{"type":"title","title":"결론: 조기 진단 및 치료의 중요성","subtitle":"감사합니다. 질문 있으신가요?","background":"cream"}]}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": 1,
|
||||
"papers": [
|
||||
{
|
||||
"key": "UPL_infraoccluded first permanent molars and their association with facial and skeletal development_1780321626649.pdf",
|
||||
"title": "infraoccluded first permanent molars and their association with facial and skeletal development",
|
||||
"authors": "",
|
||||
"year": "",
|
||||
"journal": "",
|
||||
"doi": "",
|
||||
"pmcid": null,
|
||||
"pmid": null,
|
||||
"_source": "upload",
|
||||
"abstract": "",
|
||||
"pdfPath": "uploads/infraoccluded first permanent molars and their association with facial and skeletal development_1780321626649.pdf",
|
||||
"txtPath": "uploads/infraoccluded first permanent molars and their association with facial and skeletal development_1780321626649.txt",
|
||||
"koPath": "uploads/infraoccluded first permanent molars and their association with facial and skeletal development_1780321626649.ko.txt"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 253 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 480 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 61 KiB |
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p03_1.png": "CGF와 함께하는 재생 치료용 스티키 본의 변화 과정 사진.",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p03_2.png": "제외 (텍스트 기반 표로, 슬라이드 부적합)",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p04_1.png": "PRISMA 흐름도: 2002개 연구 중 22개가 최종 리뷰 포함.",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p06_1.png": "제외 (텍스트 기반 표 이미지)",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p06_2.png": "제외. (텍스트로만 구성된 표입니다.)",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p08_1.png": "제외 (텍스트 기반 데이터 표입니다.)",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p08_2.png": "제외 (텍스트로만 구성된 표 이미지입니다).",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p11_1.png": "측정용 측벽 개방술로 상악동 리프트 및 임플란트 삽입 과정을 보여줍니다.",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p12_1.png": "Cone Beam CT 이미지: 상악동 이전 (A)과 이후 (B) 비교.",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p13_1.png": "다이어그램: 상악동 리프트 수술 기법 및 임플란트 시술 시점 요약.",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p15_1.png": "제외 (텍스트 기반 표로 슬라이드 부적합)",
|
||||
"/api/files/pptx/sinus/PMC10340512_images/figure_p16_1.png": "치과 임플란트 혈액 공급 기법을 보여주는 단면도 (부착술식 설명)"
|
||||
}
|
||||
@@ -0,0 +1,342 @@
|
||||
### **자가 혈소판 농축물(PRP, PRF, CGF)을 이용한 상악동 증대술과 골 이식의 결합: 체계적 문헌고찰**
|
||||
|
||||
**저자**: Giuseppina Malcangi 1,†, Assunta Patano 1,†, Giulia Palmieri 1, Chiara Di Pede 1, Giulia Latini 1, Alessio Danilo Inchingolo 1, Denisa Hazballa 1, Elisabetta de Ruvo 1, Grazia Garofoli 1, Francesco Inchingolo 1,* , Gianna Dipalma 1,* , Elio Minetti 2, Angelo Michele Inchingolo 1
|
||||
|
||||
### **요약**
|
||||
**배경**: 본 문헌고찰은 상악동 거상술에 사용되는 농축 성장 인자의 잠재력에 대한 최신 연구 동향을 종합적으로 제시한다.
|
||||
**재료 및 방법**: "PRP", "PRF", "L-PRF", "CGF", "구강외과", "스티키 본", "상악동 거상" 등의 검색어를 Scopus, Web of Science, PubMed 데이터베이스에서 Boolean 연산자 "AND" 및 "OR"를 사용하여 논문을 검색하였다.
|
||||
**결과**: 총 1,534편의 연구 중 22편이 본 고찰에 포함되었다.
|
||||
**고찰**: 혈소판 농축물에서 유리되는 자가 성장 인자는 골 재형성과 세포 증식을 촉진하며, 재생 수술 시 자가골 필요량을 줄이는 데 도움이 될 수 있다. 많은 연구자들은 성장 인자가 골 이식 시 초기 혈관 신생을 크게 향상시키고, 동종 이식(alloplastic) 및 이종 이식(xenogeneic) 재료와 결합 시 *in vivo*에서 혈관 형성 촉진 효과가 유의미하다고 보고 있다. 또한 염증 감소, 수술 후 통증 완화, 손상 조직의 재생 촉진 및 치유 가속화에도 긍정적인 영향을 미친다.
|
||||
**결론**: 추가 연구가 필요하지만, 자가 혈소판 농축물은 상악동 거상술 시 골 높이, 두께, 수술 부위 혈관화 개선 및 수술 후 치유 촉진을 통해 임상 결과를 향상시킬 수 있는 잠재력이 있다.
|
||||
|
||||
**키워드**: PRP; PRF; CGF; 상악동 거상(S.L.); 구강외과; 성장 인자
|
||||
|
||||
### **1. 서론**
|
||||
치아 및 치과 임플란트 주변의 치조골과 지지 구조의 보존 및 재생을 위해서는 골 흡수와 골 형성의 균형이 필수적이다[1]. 구강 내 조직 재생은 다양한 세포 유형, 신호 전달 시스템 및 기질 상호작용의 영향을 받는다[1,2]. 임플란트 식립 부위에 심각한 골 결손이 있는 경우 수술이 제한될 수 있으며, 이에 따라 다양한 골 재생 기법이 개발되었다[3]. **상악동 저거상술(Maxillary Sinus Floor Elevation, MSFE)**은 위축된 상악 후방 부위의 골량을 증가시키기 위한 대표적인 술식 중 하나이다[4,5]. MSFE는 상악동의 슈나이더막(Schneiderian membrane)을 거상하고, 수술로 형성된 상악동 저 공간에 이식 재료를 삽입하여 상악 후방부의 골 높이를 증가시키는 것을 목표로 한다[1].
|
||||
|
||||
MSFE 및 기타 골 이식 기법(생체재료 이식 포함)의 임상 시험은 보다 예측 가능하고 전략적인 임플란트 지지 보철물을 가능하게 하기 위해 수행되었다[6]. 자가골 이식은 골 유도(osteoinductive) 및 골 전도(osteoconductive) 특성, 면역 적합성으로 인해 오랜 기간 동안 사용되어 왔다[3]. 그러나 자가골 이식에는 공여부 이환(donor site morbidity), 불충분한 골량, 장기 치유 후 골 흡수 등의 단점이 존재한다[7]. 자가골 이식이 가장 생체 적합성이 높은 옵션임에도 불구하고, 이러한 단점들은 대체재료 개발의 필요성을 촉진시켰다[8]. 최근 치의학에서는 환자 자신의 혈액에서 추출한 혈소판 농축 제제가 선호되는 치료 옵션으로 부상하고 있다[9]. 혈소판은 상처 치유 과정에서 골 및 연조직 재생을 돕는 성장 인자와 사이토카인의 저장고 역할을 한다[10]. 활성화된 혈소판은 피브린 기질 내에 네트워크를 형성하고, 조직 치유 기전을 유도하며 궁극적으로 재생을 촉진하는 성장 인자를 방출한다[4]. 혈소판은 혈관 내피 성장 인자(VEGF), 전환 성장 인자-β1(TGF-β1), 혈소판 유래 성장 인자(PDGF), 표피 성장 인자(EGF), 간세포 성장 인자(HGF), 섬유아세포 성장 인자(FGF), 인슐린 유사 성장 인자(IGF) 등 다양한 성장 인자를 함유한 분비 과립을 포함하고 있다[10,11].
|
||||
|
||||
자가 혈소판 농축물의 주요 세대는 **혈소판 풍부 혈장(PRP)**, **혈소판 풍부 피브린(PRF)**, **농축 성장 인자(CGF)**로 구분된다[4]. **PRP**는 혈소판 농축물의 첫 세대로, 환자의 정맥혈을 원심 분리하여 얻은 혈소판 농축 혈장으로 골 이식 재료로 사용된다[12,13]. PRP의 항응고제 성분으로 인한 한계를 극복하기 위해, 2000년대 초 Joseph Choukroun은 항응고제 인자를 배제한 제2세대 혈소판 농축물 개발에 주력하였다[14]. **PRF**는 PRP와 유사한 특성을 가지지만, 골 형성 능력이 추가로 향상된 제2세대 혈소판 농축물이다[14]. PRF는 생체 내 트롬빈에 의해 피브리노겐이 피브린으로 전환되므로 첨가제가 필요 없으며, 이는 수술 후 합병증 위험을 최소화한다[9]. **CGF**는 2006년 Sacco에 의해 처음 도입된 새로운 혈소판 농축물로, 연조직 자극 및 치유 가속화, 골 치유 및 형성에서 유망한 결과를 보여주었다[15–18]. CGF는 소량의 혈장에서 CD34+ 줄기세포와 다양한 성장 인자를 농축한다[19]. CGF는 특수 원심분리기(Medifuge, Silfradent srl, Italy)를 사용하여 혈액 샘플을 교대로 조절된 속도로 원심 분리하여 생성된다[20]. 다양한 원심 분리 속도는 PRP나 PRF보다 크고 밀도가 높은 성장 인자 풍부한 피브린 기질을 분리할 수 있게 한다[20]. **스티키 본(Sticky Bone)**은 CGF를 이용한 재생 기법의 진화된 형태로, 원심 분리된 시험관의 액체(백색 평활벽 캡을 가진 시험관에서 수 분 후 젤화됨)와 다양한 종류의 골 입자(인산삼칼슘, BioOss, 치아 변환기로부터 유래된 상아질 등)를 혼합하여 얻어진다[21]. 이를 통해 재생 부위에 쉽게 삽입할 수 있는 치밀하고 가소성 있는 혼합물을 얻을 수 있다. 또한 제제 젤화 전에 잘게 썬 피브린 응고를 추가로 혼합하면 성장 인자가 더 풍부한 혼합물을 얻을 수 있으며, 이는 재생 잠재력을 더욱 높인다[22] (그림 1). 본 문헌고찰은 상악동 증대술에서 자가 혈소판 농축물(PRP, PRF, CGF)과 골 이식을 결합한 치료 및 실험적 잠재력에 대한 최신 연구 동향을 종합적으로 제시하고자 한다.
|
||||
|
||||
### **2. 재료 및 방법**
|
||||
#### **2.1. 프로토콜 및 등록**
|
||||
본 문헌고찰은 체계적 문헌고찰 및 메타분석 Preferred Reporting Items for Systematic Reviews and Meta-Analyses (PRISMA) 기준에 따라 수행되었다[23].
|
||||
|
||||
#### **2.2. 검색 과정**
|
||||
"PRP", "PRF", "CGF", "구강외과", "스티키 본", "상악동 거상" 등의 검색어를 Scopus, Web of Science, PubMed 데이터베이스에서 Boolean 연산자 "AND"를 사용하여 논문을 선정하였다. 검색은 지난 10년간(2010–2023년) 영어로 발표된 논문으로 제한하였다(표 1).
|
||||
|
||||
**표 1. 데이터베이스 검색 지표**
|
||||
| 항목 | 내용 |
|
||||
|--------------------|----------------------------------------------------------------------|
|
||||
| 데이터베이스 | Scopus, Web of Science, PubMed |
|
||||
| 키워드 | A "PRP"; B "PRF"; C "L-PRF"; D "CGF"; E "구강외과"; F "스티키 본"; G "상악동 거상" |
|
||||
| Boolean 연산자 | "AND" 및 "OR" |
|
||||
| 기간 | 2010–2023년 |
|
||||
| 언어 | 영어 |
|
||||
|
||||
#### **2.3. 선정 기준**
|
||||
두 명의 검토자가 짝을 이루어 다음 기준을 충족하는 논문을 선정하였다.
|
||||
**포함 기준**:
|
||||
1. 인체 대상 연구
|
||||
2. 임상 연구 또는 증례 보고
|
||||
|
||||
**배제 기준**:
|
||||
1. *in vitro* 연구
|
||||
2. 동물 연구
|
||||
3. 체계적 문헌고찰, 서술적 문헌고찰, 메타분석
|
||||
|
||||
본 문헌고찰은 PICO 기준에 따라 수행되었다:
|
||||
- **P(opulation)**: 상악동 거상이 필요한 성인 남녀
|
||||
- **I(ntervention)**: 상악동 거상술에 사용된 성장 인자
|
||||
- **C(omparison)**: 성장 인자를 사용하지 않은 상악동 거상술
|
||||
- **O(utcome)**: 골 재생 효과
|
||||
|
||||
#### **2.4. 자료 처리**
|
||||
초기 검색 단계에서 선정된 논문의 제목과 초록을 검토하여 주제와 무관한 논문을 배제하였다. 사전에 정의된 포함 기준에 부합하는 논문의 전문을 읽었으며, 검토자 간 의견 불일치는 논의를 통해 해결하였다.
|
||||
|
||||
### **3. 결과**
|
||||
Web of Science(307편), Scopus(362편), PubMed(1,333편)에서 총 2,002편의 논문이 검색되었다. 중복 논문 468편을 제거한 결과 1,534편이 남았으며, 이 중 1,512편이 포함 기준에서 벗어났다. 최종적으로 22편의 논문이 본 문헌고찰에 포함되었으며, 각 연구 결과는 표 2에 요약되어 있다(그림 2).
|
||||
|
||||
**그림 2. PRISMA 흐름도**
|
||||
|
||||
**표 2. 연구 결과 요약**
|
||||
|
||||
| 저자(연도) | 연구 유형 | 연구 목적 | 재료 및 방법 | 결과 |
|
||||
|--------------------|--------------------|------------------------------------------------|---------------------------------------------------|------------------------------------------------------------------------------------------|
|
||||
| Anitua et al., 2012 | 5예 보고 | 양측 상악동 거상술 시 PRGF 기술의 효과 평가 | - 5명의 환자<br>- 한 쪽은 소뼈+PRGF, 다른 쪽은 소뼈만<br>- 외측 접근법<br>- 2단계 임플란트 식립<br>- 5개월 후 조직형태계측 분석 | PRGF는 수술 중 조직 염증 감소, 신생골 형성 촉진, 골 조직 혈관화 촉진에 기여함. |
|
||||
| Aoki et al., 2016 | 2예 보고 | PRF를 유일한 이식 재료로 사용한 상악동 증대술의 조직학적 결과 보고 | - 2명의 환자<br>- 환자 A: PRF만 사용, 골정 상방 접근법<br>- 환자 B: PRF만 사용, 외측창 접근법<br>- 동시 임플란트 식립 | 조직학적 분석 결과 두 경우 모두 신생골 형성이 확인됨. 환자 A에서 임플란트 실패 발생. |
|
||||
| Chen et al., 2021 | 후향적 연구 | CGF와 함께 시행한 골내 상악동 거상술(OSFE)의 임상 효과 평가 | - 44명의 환자, 60개의 임플란트<br>- CGF 단독 또는 CGF+이식재 사용<br>- 골내 접근법<br>- 24개월 추적 관찰 | CGF 사용 여부와 관계없이 OSFE 접근법은 안전하고 신뢰할 수 있음. |
|
||||
| Chitsazi et al., 2018 | 임상 시험 | PRF 사용 유무에 따른 개방형 상악동 거상술 후 상악 후방부의 골 높이 및 밀도 분석 | - 14명의 환자<br>- 41개의 임플란트 식립<br>- 한 쪽은 PRF 사용, 다른 쪽은 이식재 없음<br>- 외측창 접근법<br>- 6개월 후 추적 관찰 | PRF는 골 흡수의 양과 질을 개선하는 데 기여함. 임플란트 실패 사례 없음. |
|
||||
| Choudhary et al., 2022 | 임상 연구 | 수압을 이용한 간접 상악동 거상술과 PRF 동시 임플란트 식립의 효과 평가 | - 24명의 환자<br>- 간접 상악동 거상술+수압+PRF 임플란트 식립<br>- 6개월 후 평가 | 수술 후 평균 골 높이가 유의미하게 증가하였으며, 6개월 후 임플란트 안정성 지수가 향상됨. |
|
||||
| Dai et al., 2020 | 후향적 연구 | 유도 골 재생술(GBR)에서 CGF와 무기질화 콜라겐(MC)의 임상 효능 평가 | - 15명의 환자(CGF+MC 군)<br>- 14명의 환자(MC만 군) | CGF와 MC의 병용 사용은 신생골 형성 및 수술 후 통증 감소에 긍정적인 영향을 미침. CGF-MC 복합체는 골 증대용 생체재료로 적합함. |
|
||||
| Ghasemirad et al., 2023 | 무작위 대조 시험 | 상악동 거상술에서 CGF의 치유 효과 평가 | - 9명의 환자<br>- 한 쪽은 소뼈 이식재, 다른 쪽은 CGF 사용<br>- 6개월 후 조직학적 분석 | CGF 군에서 신생골 비율이 대조군보다 유의미하게 높았으며, 잔존 이식재 양은 대조군에서 더 많았음. |
|
||||
| Huang et al., 2016 | 증례 보고 | 슈나이더막 천공의 신속하고 간단한 수리 방법 제시 | - 62세 남성<br>- 외측창 접근법<br>- PRF를 이용한 슈나이더막 천공 수리<br>- 합성골 이식재 및 임플란트 식립<br>- 30개월 추적 관찰 | PRF를 이용한 슈나이더막 천공 수리가 가능함. |
|
||||
| Inchingolo et al., 2012 | 전향적 연구 | 치과 임플란트를 위한 골 재생 시 PRP의 효능 입증 | - 63명의 환자(실험군): PRP+자가골 또는 유/무기질 골<br>- 64명의 환자(대조군): 골 이식재만<br>- 총 175개의 임플란트 | 실험군은 3D 소프트웨어(Master 3D)를 이용한 단층촬영 분석에서 일차 안정성 및 임플란트 주변 골 질이 유의미하게 향상됨. 모든 환자에서 임플란트 주변 연조직 손상 없음. |
|
||||
| Mazor et al., 2012 | 전향적 연구 | 부비동 병변이 있는 환자에서 PRF를 충전재로 사용한 상악동 거상술 및 동시 임플란트 식립 결과 평가 | - 48개월 추적 관찰 | PRF를 충전재로 사용한 상악동 거상술은 부비동 병변이 있는 환자에서도 성공적인 결과를 보임. |
|
||||
| Irdem et al., 2020 | 분할구강, 조직형태계측 연구 | 액상 PRF-DBBM 복합체가 상악동 증대술에서 골 형성 촉진에 효과적인지 평가 | - 9명의 환자<br>- 한 쪽은 소뼈 이식재, 다른 쪽은 액상 PRF-DBBM 복합체 사용 | 액상 PRF-DBBM 복합체는 상악동 증대술에서 골 형성 촉진에 효과적임. |
|
||||
|
||||
### **상악동 거상술 후 임플란트 식립 결과**
|
||||
|
||||
상악동 거상술 후 임플란트를 식립했을 때, **PRF(혈소판 풍부 섬유소)**와 함께 사용한 경우 최적의 초기 안정성을 보였으며, 임플란트 주변의 **탈단백 우골(Bio-OSS)** 및 **베타-삼인산칼슘(SINT-Oss)** 골 밀도가 증가했습니다. 또한 부비동염의 불리한 진행은 관찰되지 않았습니다.
|
||||
|
||||
### **7명의 환자 대상 연구**
|
||||
- **두 그룹으로 구분**: 액상 PRF과 **탈단백 우골 무기질(DBBM)** 혼합 그룹 vs. DBBM 단독 그룹
|
||||
- **측벽 접근법(lateral wall protocol)** 사용
|
||||
- **2단계 임플란트 식립**
|
||||
- **조직형태계측 평가** 실시
|
||||
|
||||
**결과:**
|
||||
액상 PRF과 DBBM의 조합이 새로운 골 형성을 촉진했으나, 이 효과는 통계적으로 유의미하지 않았습니다.
|
||||
|
||||
### **Table 2. 계속**
|
||||
|
||||
| 저자 (연도) | 연구 유형 | 연구 목적 | 결과 |
|
||||
|---------------------|-------------------------|---------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Kaarthikeyan et al., 2019 [33] | 무작위 대조 시험 | 텐트 폴(tent pole)로 임플란트를 사용하고, PRF 또는 혈병만을 상악동 충전재로 사용하여 상악동 거상 후 골 성장을 비교함. | 상악동을 채우는 유일한 재료로 PRF이 혈병보다 더 나은 선택일 수 있음. |
|
||||
| Kempraj et al., 2020 [34] | 방사선학적 연구 | 상악동 거상술에서 PRF 단독 사용과 이종이식재(Bio-Oss)를 비교함. | PRP 단독 사용에 비해 Bio-Oss 그룹에서 골 밀도와 골 높이가 유의미하게 증가함. |
|
||||
| Lv et al., 2021 [35] | 무작위 대조 시험 | 동시 임플란트 식립 결과를 평가하고, PESS 접근법과 측면 상악동 거상술(LSFE)을 비교함. | PESS가 LSFE보다 더 수용 가능하며, 수술 후 이환율이 낮았음. |
|
||||
| Merli et al., 2022 [36] | 임상 대조 시험 | 일회성 측면 접근법으로 상악동에 임플란트를 식립하고, CGF 또는 DBBM을 사용한 결과를 분석함. | CGF와 DBBM 그룹 간에 변연골 소실(MBL) 변화에 통계적으로 유의미한 차이는 없었음. |
|
||||
| Molemans et al., 2019 [37] | 단일 코호트 전향적 연구 | 동시 임플란트 식립 및 상악동 거상술(SFE)에서 백혈구 및 혈소판 풍부 섬유소(L-PRF)를 단독 이식재로 사용한 결과를 평가함. | L-PRF는 안전하고 경제적인 상악동 하부 이식재로, 단독 사용 시 자연스러운 골 성장을 유도함. |
|
||||
| Narang et al., 2015 [38] | 증례 보고 | 골 절제술 및 이식재를 사용하여 골 두께를 10mm 이상 증가시킬 수 있는 적절한 기법과 재료를 제시함. | – |
|
||||
|
||||
### **7명의 환자 대상 연구**
|
||||
- **측벽 골 윈도우(lateral bony window)** 사용
|
||||
- **텐트 폴(tent pole)로 임플란트** 사용
|
||||
- **한 쪽에는 PRF, 다른 쪽에는 혈병만** 사용
|
||||
- **12개월 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
상악동을 채우는 유일한 재료로 PRF이 혈병보다 더 나은 선택일 수 있음.
|
||||
|
||||
### **22명의 환자 대상 연구 (상악동 거상술)**
|
||||
- **측면 창 기술(lateral window technique)** 사용
|
||||
- **Bio-Oss(1군) 또는 PRF(2군)** 사용
|
||||
|
||||
**결과:**
|
||||
PRP 단독 사용에 비해 Bio-Oss 그룹에서 골 밀도와 골 높이가 유의미하게 증가함.
|
||||
|
||||
### **40명의 환자 대상 연구**
|
||||
- **PESS(PRF 단독 이식재, 경정중적 접근) vs. LSFE(이종골 기질, 측면 접근)**
|
||||
- **동시 임플란트 식립**
|
||||
- **수술 후 3, 6, 18개월 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
PESS가 LSFE보다 더 수용 가능하며, 수술 후 이환율이 낮았음.
|
||||
|
||||
### **20명의 환자 대상 연구**
|
||||
- **측벽 접근법(lateral wall technique)** 사용
|
||||
- **CGF 또는 DBBM 단독 이식재** 사용
|
||||
- **동시 임플란트 식립**
|
||||
- **12개월 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
CGF와 DBBM 그룹 간에 변연골 소실(MBL) 변화에 통계적으로 유의미한 차이는 없었음.
|
||||
|
||||
### **26명의 환자 대상 연구 (28개 상악동 거상술)**
|
||||
- **6개 측면 상악동 거상술, 22개 경치조골 상악동 거상술**
|
||||
- **L-PRF 단독 이식재** 사용
|
||||
- **슈나이더막 보호용 L-PRF** 사용
|
||||
- **임플란트 식립 시점 및 6개월 후 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
L-PRF는 안전하고 경제적인 상악동 하부 이식재로, 단독 사용 시 자연스러운 골 성장을 유도함.
|
||||
|
||||
### **67세 여성 환자 대상 연구**
|
||||
- **Summer osteotome 변형 기법** 사용
|
||||
- **PRF와 골 이식재 혼합** 사용
|
||||
|
||||
**결과:**
|
||||
OSFE(경치조골 상악동 거상술) 및 임플란트 식립 시 PRF와 골 이식재를 사용하는 것은 안전하고 효율적인 방법임.
|
||||
|
||||
### **Table 2. 계속**
|
||||
|
||||
| 저자 (연도) | 연구 유형 | 연구 목적 | 결과 |
|
||||
|---------------------|-------------------------|---------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Nizam et al., 2017 [39] | 무작위 임상 대조 시험 | L-PRF와 DBBM의 조합이 상악동 증강술에서 골 재생에 미치는 영향을 평가함. | – |
|
||||
| Powell et al., 2022 [40] | 증례 시리즈 | 상악동 거상술에서 백혈구 및 혈소판 풍부 섬유소(L-PRF)의 효과를 조사함. | – |
|
||||
| Rapone et al., 2022 [3] | 후향적 연구 | 식물성 하이드록시아파타이트와 탈회 무기질 우골을 PRP과 함께 사용한 골 재생 치료의 장기 임상 결과를 비교함. | – |
|
||||
| Simonpieri et al., 2012 [9] | 증례 시리즈 (6년 추적) | PRF 응괴 및 막만을 사용하여 측방 상악동 거상술 및 즉시 임플란트 식립을 시행한 결과를 보고함. | – |
|
||||
| Zhang et al., 2012 [41] | 전향적 연구 (6개월 추적) | 상악동 증강술에서 PRF이 골 재생에 미치는 영향을 평가하기 위해 이종이식재(DBBM)와 함께 사용함. | L-PRF와 DBBM의 조합이 재생된 골의 양을 증가시키지는 않았음. |
|
||||
|
||||
### **13명의 환자 대상 연구**
|
||||
- **두 그룹으로 구분**: L-PRF와 DBBM 혼합 그룹 vs. DBBM 단독 그룹
|
||||
- **측면 창 접근법(lateral window approach)** 사용
|
||||
- **2단계 임플란트 식립**
|
||||
- **12개월 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
L-PRF와 DBBM의 조합이 재생된 골의 양을 증가시키지는 않았음.
|
||||
|
||||
### **임플란트 식립 사례**
|
||||
1. **첫 번째 사례**: 상악 하이브리드 의치 지지용 양측 상악동 증강술에서 L-PRF와 동종이식골을 사용함.
|
||||
2. **두 번째 사례**: 임플란트 식립을 위한 약 4mm의 추가 수직 고도 확보를 위해 동결건조 동종이식골을 사용함.
|
||||
3. **세 번째 사례**: L-PRF/이종이식골과 함께 상악동 증강술을 시행한 후 임플란트를 식립하고, 6개월 후 조직검사를 통해 이종이식골과 접촉한 신선하고 생존 가능한 골 조직을 확인함.
|
||||
|
||||
### **57명의 환자 대상 연구**
|
||||
- **측벽 접근법 및 분할 골 기법(split bone technique)** 사용
|
||||
- **두 그룹으로 구분**:
|
||||
- Algipore® 그룹 (n=29)
|
||||
- Bio-Oss® 그룹 (n=28)
|
||||
- **2단계 임플란트 식립**
|
||||
- **7년 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
두 그룹 모두에서 시간이 지남에 따라 예측 가능한 결과를 보임.
|
||||
|
||||
### **23명의 환자 대상 연구 (측면 상악동 거상술)**
|
||||
- **고전적 측면 상악동 거상술(Caldwell-Luc 접근법)** 사용
|
||||
- **슈나이더막을 L-PRF 막으로 덮음**
|
||||
- **상악동 하부를 L-PRF 응괴로 채움**
|
||||
- **6개월, 1년, 이후 매년 6년까지 추적 관찰**
|
||||
|
||||
**결과:**
|
||||
임플란트 변연골 높이가 일정하게 유지되었으며, 재건된 상악동 바닥의 높이는 항상 임플란트 첨단부와 연속성을 보였음.
|
||||
|
||||
### **10명의 환자 대상 연구 (상악동 거상술)**
|
||||
- **실험군**: Bio-Oss와 PRF 혼합 사용 (5명)
|
||||
- **대조군**: Bio-Oss 단독 사용 (5명)
|
||||
|
||||
**결과:**
|
||||
6개월 치유 기간 후, PRF와 DBBM을 함께 사용한 경우의 이점이나 단점은 관찰되지 않았음.
|
||||
|
||||
### **4. Discussion**
|
||||
|
||||
#### **4.1. 다양한 혈소판 유도체**
|
||||
원심분리 조건에 따라 혈소판 농축물은 PRP(혈소판 풍부 혈장), PRF(혈소판 풍부 섬유소), CGF(농축 성장 인자)로 분류됩니다 [42,43].
|
||||
|
||||
**PRP(혈소판 풍부 혈장)**:
|
||||
PRP는 성장 인자와 혈소판이 풍부한 저용량 혈장으로, FGF, TGF-β, IGF, PDGF 유사 성장 인자 및 비트로넥틴, 피브린, 피브로넥틴과 같은 세포 부착 분자를 포함합니다. 이러한 구성 성분으로 인해 PRP는 상처 치유를 촉진합니다 [44].
|
||||
|
||||
**PRP 제조 과정**:
|
||||
정맥혈을 채취한 후 혈액이 응고되지 않도록 항응고제를 혼합합니다. 이 혼합물을 2400rpm에서 10분간 원심분리하면 혈액은 두 층으로 나뉩니다(상층부: 황색 혈장, 하층부: 적혈구). 전체 혼합물을 카눌레이션 기법을 사용하여 두 번째 튜브로 옮긴 후 3600rpm에서 15분간 다시 원심분리하여 튜브 하단에 혈소판 분획을 모읍니다. 이렇게 얻은 것이 수술에 사용되는 PRP입니다 [44].
|
||||
|
||||
**PRP의 한계**:
|
||||
PRP의 항응고제 성분으로 인한 한계 때문에, 2000년대 초 Joseph Choukroun은 항응고제를 사용하지 않는 2세대 혈소판 농축물 개발에 집중했습니다 [45].
|
||||
|
||||
**PRF(혈소판 풍부 섬유소)**:
|
||||
이후 2700rpm(750g)에서 단일 원심분리 사이클을 거치면, 응고 인자가 튜브 상단으로 이동하지 않는 혈소판 농축물이 수집되었습니다. 이 제제가 PRF입니다 [46,47].
|
||||
|
||||
PRF는 성장 인자와 혈소판이 풍부한 막을 형성할 수 있는 2세대 혈소판 제품입니다. PRF는 또한 섬유소 매트릭스 내에 백혈구(WBCs)를 포함하고 있어 L-PRF(백혈구 및 혈소판 풍부 섬유소)라고도 합니다 [46,48].
|
||||
|
||||
**PRF 제조 과정**:
|
||||
말초 정맥혈을 채취하여 항응고제가 없는 유리 내벽 플라스틱 튜브에서 2700rpm으로 12분간 또는 3000rpm으로 10분간 원심분리합니다. PRF에는 항응고제가 없기 때문에 혈액을 튜브에 채취하는 즉시 응고가 시작됩니다 [8]. 원심분리 후 상층부에는 세포가 없는 혈장이, 하층부에는 적혈구가 풍부한 층이 형성되며, 중간층에는 PRF 응괴가 형성됩니다. PRF 응괴는 혈소판과 백혈구가 농축된 강력한 섬유소 매트릭스로 구성됩니다 [46,47].
|
||||
|
||||
PRF는 주로 혈소판, 섬유소, 혈소판 성장 인자, 사이토카인, 백혈구, 순환 줄기세포, 단핵구, T 및 B 림프구, 호중구 과립구를 포함합니다 [49].
|
||||
|
||||
**CGF(농축 성장 인자)**:
|
||||
CGF는 2006년 Sacco에 의해 처음 사용된 백혈구 및 혈소판 풍부 섬유소 구조입니다 [50].
|
||||
|
||||
**CGF 제조 과정**:
|
||||
PRF와 마찬가지로 CGF는 단일 원심분리 방법으로 얻습니다. 적색 캡 실리카 입자로 코팅된 항응고제가 없는 플라스틱 튜브를 사용하며, 이 과정에서는 외인성 물질을 추가할 필요가 없습니다 [50].
|
||||
|
||||
혈액을 2400~2700rpm에서 12분간 저속 및 제어된 속도로 원심분리합니다. 그 결과 응괴는 세 층으로 나뉩니다(상층부: 혈소판 빈혈장, 중간층: 섬유소와 CGF를 포함하는 중합된 치밀 섬유소 블록, 하층부: 적혈구). 상층부와 하층부는 버리고, CGF는 버피 코트 층에서 수집됩니다 [51].
|
||||
|
||||
**CGF의 특성**:
|
||||
2006년 Sacco가 처음 개발한 CGF는 PRP와 PRF보다 더 단단한 섬유소 구조를 가지고 있습니다 [52]. 또한 CGF는 골 재생 및 유방 확대술에서 골형성을 촉진하기 때문에 더 효과적입니다 [53,54].
|
||||
|
||||
CGF는 PDGF, TGF-β, VEGF, 인슐린 유사 성장 인자, 상피 성장 인자, 섬유아세포 성장 인자, 골 형성 단백질 및 CD34+ 세포와 같은 성장 인자를 포함합니다 [55]. CGF는 혈관 유지, 혈관신생 및 신생혈관 형성에 중요한 역할을 합니다 [56].
|
||||
|
||||
Dai et al.의 연구에서는 GBR(유도골재생술)에서 CGF와 MC(미네랄화 콜라겐)의 효능을 평가했습니다 [19]. CGF+MC를 사용한 환자와 MC만을 사용한 환자를 비교한 결과, 모든 임플란트가 치유되었으며, CGF+MC 그룹에서 부종과 통증이 적었습니다. CGF와 MC의 복합체는 골 증강을 위한 적합하고 효율적인 생체재료로 보입니다 [19].
|
||||
|
||||
Ghasemirad et al.의 이중맹검 연구에서는 상악동 거상술에서 CGF가 골 치유에 미치는 영향을 평가했습니다 [29]. 한 쪽에는 소의 이종이식재를, 다른 쪽에는 CGF를 적용했습니다. 알리자린 레드와 헤마톡실린-에오신 염색 결과, CGF 그룹에서 형성된 골의 비율이 대조군보다 유의미하게 높았습니다 [29].
|
||||
|
||||
따라서 6개월 후 CGF 그룹에서 새로 형성된 골의 비율이 대조군(이종이식재)보다 유의미하게 높았습니다 [29].
|
||||
|
||||
Zhang et al.는 이종이식재(탈단백 우골)와 함께 시행한 상악동 증강술에서 PRF가 골 재생에 미치는 영향을 평가했습니다 [41]. 조직학적 검사 결과, PRF를 사용한 환자와 이종이식재만을 사용한 환자 간에 통계적으로 유의미한 차이는 발견되지 않았습니다. 결론적으로, 이 연구에서는 상악동 증강술에서 탈단백 우골과 함께 PRF를 사용한 경우 6개월 후에도 차이가 없었습니다 [41].
|
||||
|
||||
#### **골 조직 재생의 "골드 스탠다드"**
|
||||
골 조직 재생의 "골드 스탠다드"는 동일한 환자의 인접 부위에서 채취한 자가이식골입니다 [57]. 그러나 이 방법은 두 번째 수술 절차, 예측 불가능한 흡수 정도, 공여부 부족 등의 단점이 있습니다 [58,59]. 따라서 이러한 단점을 피하기 위해 골 대체재를 사용할 수 있습니다.
|
||||
|
||||
상악동 증강술에는 자가이식골, 이종이식골, 동종이식골 등 다양한 이식재가 사용되며, 각각 장단점이 있습니다 [60]. PRF는 혈소판이 연조직 및 골의 발달과 치유에 필수적이기 때문에 다른 이식재보다 더 많은 장점을 가지고 있습니다 [61,62].
|
||||
|
||||
**PRP(혈소판 풍부 혈장)**:
|
||||
PRP는 환자의 말초 정맥혈에서 원심분리하여 얻은 혈
|
||||
|
||||
최적의 골 재생을 촉진하고 수술 중 상악동 막의 완전성을 보존할 수 있었습니다[31].
|
||||
|
||||
반면 Kempraj 등[34]은 상악동 거상술에서 Choukroun의 PRP를 단독 이식재로 사용한 경우와 이종이식재(Bio-OSS)를 비교했습니다. 이 연구는 측방 창 기법을 사용한 22건의 시술로 구성되었습니다. 방사선학적 결과에서 PRP 단독 사용에 비해 Bio-Oss 군에서 골 밀도와 골 높이의 유의미한 증가가 관찰되었습니다. 이는 지지 구조물이 없어 PRF 플러그가 상악동 막의 붕괴를 일으켰기 때문으로 보이며, Lundgren 등[65]도 동일한 현상을 보고했습니다.
|
||||
|
||||
Powell 등은 L-PRF를 세 가지 다른 방법으로 실험하여 유망한 결과를 보여주었습니다. 첫 번째 환자에서는 양측 상악동 증대술을 통해 상악 하이브리드 덴처를 지지하기 위해 L-PRF를 사용했습니다. 두 번째 환자에서는 Schneiderian 막의 거상에 L-PRF를 사용했으며, 세 번째 환자에서는 L-PRF/이종이식재 상악동 증대술 후 임플란트 식립 6개월 후 조직학적 검사를 실시했습니다[40]. 모든 환자에서 치과 임플란트가 성공적으로 식립되었으며, 두 번째 경우 동결건조 골 동종이식재가 임플란트 식립을 위한 약 4mm의 추가 수직 높이를 제공했습니다. 상악동 증대술 6개월 후 세 번째 사례의 조직학적 결과에서는 이종이식재와 접촉한 신선하고 생존 가능한 골의 형성이 확인되었습니다[40].
|
||||
|
||||
Simonpieri 등은 PRP의 효능에 대한 문헌 연구 결과가 명확하지 않을 수 있다고 언급했습니다. 이는 다양한 PRP가 여러 가지 다른 골 재료와 다양한 조합으로 시도되었기 때문입니다[9]. 하악동 하부 절개 시 골 이식재를 관리하는 훌륭한 방법이지만, PRP가 골 치유를 가속화할 잠재력이 있음에도 불구하고, 이 술식의 증거 수준은 여전히 미미합니다. 이는 PRP 없이도 수술 자체가 이미 매우 높은 성공률을 보이기 때문입니다[9]. 수술 방법과 PRP 및 골 이식재의 조합 방식이 연구마다 달랐기 때문에, Simonpieri 등은 다양한 방법론적 변이로 인해 문헌의 다양한 연구에서 광범위한 결론을 도출하기 어려울 수 있다고 주장했습니다[9] (그림 3 및 4).
|
||||
|
||||
Tatum은 1976년 Caldwell-Luc 술식을 변형하여 최초의 상악동 거상술을 시행했습니다. 측방 창을 통해 상악동 막을 박리하고 거상했으며(그림 5), 이 경우 상악동에 자가골을 골 대체재로 사용하고 6개월 후 임플란트를 식립했습니다[66]. Boyne과 James는 Caldwell-Luc 상악동 개정술과 측방 창 상악동 바닥 거상을 제안했으며, 임플란트 식립은 3개월 후에 이루어졌습니다[66]. 최초의 상악동 바닥 거상술 이후 다양한 이식 기법과 재료가 제안되었습니다.
|
||||
|
||||
1986년 Tatum Jr.는 수술 후 통증과 불편을 최소화하기 위해 경치조 상악동 바닥 거상술을 개발했습니다[67]. Summers는 1994년에 이 접근법을 수정했습니다[68]. 잔존 골 높이가 얇더라도 이식재를 사용하지 않는 Summers의 골 형성술은 제한된 이식의 개념을 발전시키는 데 기여했습니다. 상승된 상악동과 같은 폐쇄 공간에서는 골과 상악동 막의 골형성 잠재력이 잘 보호되고 효과적입니다[69,70].
|
||||
|
||||
Simonpieri 등은 24명의 환자에서 측방 창 기법을 사용한 상악동 거상술을 시행했으며, 임플란트 식립 후 2~6년간 추적 관찰했습니다(표 2). 환자들은 상악동 바닥으로부터 치조정 골 높이가 5mm 미만인 하악동 증대 범주 4(SA4)의 상악동 형태를 가지고 있었습니다. Schneiderian 막 보호를 위해 PRF 막을 사용했으며, 임플란트는 L-PRF로 패치된 Schneiderian 막을 지지하는 "텐트 말뚝" 역할을 했습니다. 이 연구에서 임플란트 주변 치조정 골 높이는 일정했으며, 재건된 상악동 바닥 높이는 항상 임플란트의 첨단 가장자리와 연속적이었습니다[71] (그림 6).
|
||||
|
||||
실제로 즉각적인 임플란트 식립을 통해 Schneiderian 막을 적절한 높이로 보존할 수 있다면, 이 기법은 성공적인 결과를 가져왔습니다[72]. 그러나 이 기법은 상악동 막의 파열을 허용하지 않으며, 상악동 강저에 혈괴를 채우는 데 어려움이 있습니다[71]. Kaarthikeyan 등은 PRF가 임플란트를 텐트처럼 지지하는 경우 상악동 충전재로 단독 사용 시 효과적인 생체재료임을 결론지었지만, 수술 중 상악동 막의 천공은 만족스럽지 않은 결과를 초래할 수 있다고 보고했습니다[33].
|
||||
|
||||
다른 저자들은 측방 접근법으로 이식재 없이 전혈만 사용하여 완전한 상악동 거상술을 수행할 수 있음을 보여주었습니다[73,74]. Chitsazi 등(표 2)은 한 쪽에는 PRF만을 골 이식재로 사용하여 상악동을 거상하고, 다른 쪽에는 이식재를 사용하지 않았습니다. 임플란트는 한 번의 세션에서 식립되었습니다. 이 연구(표 3)는 PRF가 골 흡수의 양과 질을 모두 개선할 수 있음을 보여주었습니다[27].
|
||||
|
||||
PRF에 포함된 피브린 네트워크는 삽입 부위에 맞춰 삼차원 구조를 형성하는 경향이 있어 치유 과정을 촉진합니다. 피브린 단량체의 축적으로 인해 부드럽고 다공성 물질의 얇은 망이 형성되며, 이는 해당 부위와 주변 조직의 빠른 세포 정착을 가능하게 합니다[9,75,76].
|
||||
|
||||
Molemans 등은 상악동 거상에서 충전재로 L-PRF만을 사용한 연구를 진행했습니다. 치조정 높이가 5mm 미만인 경우에만 측방 창 기법을 사용했으며, 그 외에는 경정중 기법을 선호했습니다(표 2). 이 생체재료가 측방 상악동 수술에서 성공적으로 사용될 수 있음을 보여주었습니다. 임플란트 실패는 경정중 기법에서만 관찰되었으며, 이는 수술 중 막이 천공되었을 가능성이 있습니다[37].
|
||||
|
||||
Choudhary 등은 초기 평균 높이가 5.573 ± 0.66mm인 경우 PRF와 유압을 이용한 간접 상악동 거상 및 동시 임플란트 식립의 효과를 평가했습니다(표 3). 수술 후 평균 초기 높이가 유의미하게 증가했습니다(표 2). 6개월 후 임플란트 안정성 지수가 증가했습니다[28]. 이러한 결과는 간접 상악동 거상 및 동시 PRF 임플란트 식립 후 잔존 치조제 높이가 현저히 증가했다는 이전 연구 결과와 일치했습니다[77,78].
|
||||
|
||||
Summers의 골 형성술 동안 PRF 막은 충전재로 좋은 결과를 보였습니다. PRF는 골 형성술 중 쿠션 역할을 하며 손상된 Schneiderian 막의 치유를 지원합니다[79]. Huang 등은 측방 창 기법을 사용한 상악동 거상술로 인해 발생한 Schneiderian 막의 천공을 PRF 막으로 수리할 수 있음을 보여주었습니다. Schneiderian 막의 천공은 PRF 막으로 복구될 수 있으며, PRF 막의 피브린과 혈소판 성분이 이러한 효과에 기여할 수 있습니다[30,65,80,81].
|
||||
|
||||
1단계 또는 2단계 술식에 관계없이 Rosen 등은 골 형성술 상악동 바닥 거상에서 잔존 치조제 높이가 5mm 이상일 때 임플란트 식립 성공률이 더 높다고 보고했습니다[82]. 다른 저자들은 잔존 치조제 높이가 5mm 미만일 때 실패율이 증가한다고 보고했습니다[83]. 그러나 Li[84]는 초기 안정성이 확보된다면 잔존 치조제 높이가 3~4mm인 경우에도 골 형성술을 적용할 수 있다고 주장했습니다. Krasny 등은 잔존 골 높이가 3~5mm인 26명의 환자에서 경치조 상악동 거상술을 두 단계로 성공적으로 시행했습니다[85].
|
||||
|
||||
Aoki 등은 두 증례 보고에서 상악동 거상술을 시행한 결과에 대한 조직병리학적 분석을 발표했습니다. 한 증례에서는 측방 창 기법과 PRF만을 골 충전재로 사용하여 두 단계로 임플란트를 식립했으며, 다른 증례에서는 경정중 접근법과 PRF만을 골 충전재로 사용했습니다(표 2). 두 증례 모두 잔존 골 높이가 2.7mm 미만이었습니다. 조직병리학적 결과에서 PRF가 상악동 내에 존재할 경우 새로운 골 형성을 유도하는 것으로 나타났습니다[25].
|
||||
|
||||
Schneiderian 막은 높은 골형성 잠재력을 가지고 있어 대부분의 이식재가 골 발육을 유도하는 이유를 설명합니다[86-88]. 이식재를 사용하지 않더라도 상악동 바닥 거상은 충분한 골 발육과 임플란트 수명을 확보할 수 있습니다[72,89,90]. 그러나 동물 연구에서 Kim 등은 이식재를 사용하지 않은 상악동 거상술에서 골 발육이 제한적임을 보여주었습니다[91]. 또한 Sul 등은 이식재 없이 골 형성이 제한될 수 있으며, 임플란트 첨단이 Schneiderian 막에 걸릴 수 있다고 주장했습니다[92]. 그러나 Simonpieri 등의 연구에서는 PRF 막의 존재가 임플란트 첨단이 상악동 막과 얽히는 것을 방지한다고 보고했습니다[71].
|
||||
|
||||
Anitua 등은 양측 상악동 거상술 연구에서 한 쪽은 우골과 혈소판 풍부 성장인자(PRGF)를 사용하고, 다른 쪽은 대조군으로 우골만을 사용했습니다(표 2). 그 결과 PRGF를 사용한 쪽에서 새로운 골 형성이 더 빠르고 치밀하며 치밀도가 높았으며, 우골만을 사용한 쪽은 염증이 더 심했습니다. 환자들은 우골만을 사용한 쪽에서 통증을 호소했습니다[24].
|
||||
|
||||
**표 3.** 상악동 거상술에서 혈소판 유래 및 다양한 이식재를 사용한 골 재생 결과 비교(수술 후 6-12-18개월). RBH: 수술 전 잔존 골 높이; MBL: 변연골 소실; TBH: 총 골 높이.
|
||||
|
||||
| 연구 | 그룹 | RBH | MBL | TBH |
|
||||
|------|------|-----|-----|-----|
|
||||
| Chen et al., [88] | A군, CGF + 골 이식 | A—5.01 ± 0.64 | A—0.11 ± 0.02 | - |
|
||||
| | B군, CGF 단독 | B—5.23 ± 0.49 | B—0.10 ± 0.02 | - |
|
||||
| Merli et al., [36] | A군, DBBM | A—2.3 (0.8) | A—0.04 (0.1) | A—9.4 (1.1) |
|
||||
| | B군, CGF | B—3.0 (0.8) | B—0.2 (0.2) | B—9.7 (1.9) |
|
||||
| Lv et al., [35] | A군, PESS | A—3.35 ± 0.79 | A—0.60 ± 0.25 | A—7.67 ± 1.29 |
|
||||
| | B군, LSFE (6개월 후) | B—2.92 ± 0.63 | B—0.69 ± 0.35 | B—10.32 ± 1.26 |
|
||||
|
||||
혈소판 유래 제품은 단핵구 사이토카인 방출을 억제하고 염증을 제한하는 것으로 나타났습니다[93]. 또한 혈소판이 활성화된 대식세포에서 인터루킨-1(IL-1)의 방출을 초기 단계에서 차단한다는 새로운 연구 결과가 있습니다. 혈소판 풍부 제품이 항염증제로 작용하는 과정에 대한 광범위한 설명이 가능할 수 있습니다[3].
|
||||
|
||||
Lv 등에 따르면, 플랩리스 내시경 보조 골 절개 상악동 바닥 거상술에서 PRF만을 사용한 경우, 측방 창 기법으로 우골을 사용한 상악동 거상에 비해 수술 후 통증과 부종의 발생률이 낮고 환자가 더 잘 견딜 수 있습니다(표 2). 그러나 PRF만을 사용한 경정중 접근법(표 3)과 비교할 때, 우골을 사용한 측방 창 기법이 임플란트 주변 골 높이와 밀도를 더 많이 제공하는 것으로 보입니다[35].
|
||||
|
||||
Rapone 등은 7년간 측방 창 기법을 사용한 상악동 거상술 결과를 관찰했습니다[3]. 환자는 두 그룹으로 나뉘었으며, 한 그룹은 천연 다공성 플루오로하이드록시아파타이트와 PRF를 이식재로 사용했고, 다른 그룹은 우골과 자가골(50:50)을 PRP와 함께 사용했습니다. 두 그룹 모두에서 이 연구는 시간이 지남에 따라 예측 가능한 결과를 보여주었습니다(표 2). 이식재를 사용하지 않은 상악동 임플란트와 비교할 때, 이 방법은 더 나은 장기 예후와 더 높은 생존율을 제공합니다[3,94].
|
||||
|
||||
Irdem 등은 4개월 동안 우골과 액상 PRF의 조합이 새로운 골 형성을 돕지만, 우골 단독 사용과 비교했을 때 통계적으로 유의미한 차이는 없었다고 보고했습니다[32]. Nizam 등(표 2)도 입자형 DBBM에 L-PRF를 추가해도 조직학적 및 조직형태학적 검사에서 재생된 골의 양이나 새로 형성된 골에 이식재가 통합되는 정도는 증가하지 않았다고 결론지었습니다[39].
|
||||
|
||||
Narang 등은 증례 보고에서 잔존 치조제 높이가 1.49mm와 1.47mm인 환자에서 PRF와 골 이식재를 사용하여 상악동 영역에서 10mm 이상의 높이를 달성했습니다. 사용된 기법은 변형된 Summers 기법이었습니다. 이 방법은 상악동을 거상하고 임플란트를 성공적으로 식립할 수 있음을 보여주었습니다(표 2). 이 술식은 일반적으로 6-9개월이 필요한 다른 기법에 비해 3-4개월의 회복 기간만 필요합니다. 이는 상악동 강에 형성된 작은 접근 구멍 때문일 수 있습니다. 이 접근법은 혈류에 거의 영향을 미치지 않습니다. 두 그룹 모두에서 24개월 후 임플란트 성공률은 100%였습니다.
|
||||
|
||||
| 연구 | 임플란트 성공률 |
|
||||
|------|------------------|
|
||||
| | 24개월 후 두 그룹 모두 100% |
|
||||
| | 12개월 후 두 그룹 모두 실패 없음 |
|
||||
| | 6개월 후 두 그룹 모두 실패 없음 |
|
||||
| Lv et al., [35] | PESS—3, 6, 9개월 후 96.15% |
|
||||
| | LSFE—3, 6, 9개월 후 100% |
|
||||
|
||||
이 기법의 주요 장점은 측방 창 기법과 달리 임플란트와 골 이식재가 대부분 협측에서 혈액 공급을 받는다는 점입니다[38] (그림 7).
|
||||
|
||||
또한 Merli 등(Table 2)에 따르면, CGF만을 이식재로 사용한 측방 상악동 저거술은 탈회된 소의 골 이식(DBBM)과 유사한 임플란트 성공률과 미세한 골 수준 변화를 보였습니다[36]. CGF 그룹과 DBBM 그룹 간 변연 골 소실(marginal bone loss)에는 통계적으로 유의미한 차이가 없었습니다(Table 3).
|
||||
|
||||
실제로 CGF는 치밀한 피브린 네트워크와 높은 농도의 성장 인자(GF)를 포함하는 차세대 혈소판 제품으로, 세포 증식에 중요한 역할을 합니다[95]. CD34+ 세포는 CGF-RBC의 두 층 모두에서 다수 발견되며, CGF 매트릭스에 다량 포획됩니다. CGF는 골형성 세포의 분화와 증식을 촉진하므로 조직 재생에 더 큰 잠재력을 가지고 있습니다. 그 결과, CGF는 알칼리성 인산가수분해효소(ALP) 활성을 크게 증가시킵니다[52,96].
|
||||
|
||||
Chen 등(Table 3)에 따르면, 수술 전 잔존 골 높이가 4~6mm인 환자에서 CGF를 사용한 골막 거상술은 골 이식을 사용하든 사용하지 않든 안전하고 신뢰할 수 있는 방법입니다. 골 이식을 받은 환자는 골 이식을 받지 않은 환자에 비해 수술 후 불편감과 통증을 더 많이 경험했습니다. 그러나 두 그룹 간 변연 골 소실에는 큰 차이가 없었습니다[26].
|
||||
|
||||
일부 연구에 따르면, 증강된 상악동에 식립된 임플란트의 생존율은 자가골만으로는 개선되지 않습니다[97-100]. 두 리뷰에서는 자가 블록 이식을 사용했을 때 실망스러운 82%의 임플란트 성공률이 보고되었습니다[98,99].
|
||||
|
||||
반면, 자가골 대신 이종골을 사용했을 때 두 리뷰에서 조사된 10,000개의 임플란트 중 96%가 상악동 증강술 후 생존했습니다[97,98]. Forabosco 등의 연구에서 이종골만 사용한 그룹에서는 96.1%의 생존률이 기록되었으며, CGF와 이종골을 함께 사용한 그룹에서는 96.4%의 생존률이 기록되었습니다[101].
|
||||
|
||||
Chen 등은 CGF와 골 이식을 함께 사용한 그룹과 CGF만 사용한 그룹 모두에서 100%의 임플란트 성공률을 보고했습니다[26]. 상악동 거상에서 CGF만을 이식재로 사용한 다른 연구들[54]에서도 얻은 골 수준과 임플란트의 성공률이 소의 골 이식과 비교할 만하다고 밝혔습니다[36].
|
||||
|
||||
### 5. 결론
|
||||
|
||||
결론적으로, 치주 및 임플란트 주위 결손 치료를 위한 다양한 수술 방법이 있습니다. 이는 치골 임플란트부터 골 형성을 증가시키고 가속화할 수 있는 생체재료의 사용에 이르기까지 다양합니다. 치아 발치 후에는 골 흡수 과정이 일어나며, 특히 임플란트 지지 재활을 고려할 때 골 증가가 필요합니다. 상악동 저거술(MSFE)은 골량이 감소된 경우를 해결하기 위한 표준 수술 절차가 되었으며, 치과 임플란트의 위치를 가능하게 합니다. 골 보존 및 재생을 위해 합성 제품부터 이종 또는 자가 이식재에 이르기까지 다양한 생체재료가 제안되었습니다.
|
||||
|
||||
조직학적 분석 결과, 성장 인자를 사용함으로써 혈관 신생과 새로운 골의 조기 형성이 촉진되는 것으로 나타났습니다. PRF와 골 이식을 함께 사용했을 때의 유의미한 혈관생성 효과는 재생 과정을 촉진하며, 손상된 골 조직을 새로운 골 세포로 수복하는 신체의 자연적인 능력을 활용합니다. 신생혈관형성을 통한 수술 부위의 혈관화 개선은 수술 상처의 치유를 촉진하며, 특히 상악동 거상술과 같이 혈관화가 감소된 수술 부위에서 특히 유리합니다. PRP 전처리는 일차 안정성을 제공하며, 임플란트-보철 재활을 통계적으로 유의미하게 개선합니다. 다른 골 대체재와 비교했을 때, CGF만을 사용한 상악동 저거술은 탈회된 소의 골 매트릭스와 유사한 임플란트 생존률과 변연 골 수준 변화를 보였습니다.
|
||||
|
||||
추가 연구가 필요하지만, CGF, PRF, PRP의 사용은 수술 부위의 혈관화를 개선함으로써 임상 결과를 향상시킬 수 있으며, 환자의 수술 후 삶의 질을 개선할 수 있습니다.
|
||||
|
||||
혈소판 유도체는 앞으로 비용, 준비 시간 및 수술 효율성 개선을 통해 더욱 발전할 것입니다. 이는 임상의들이 값비싸고 복잡한 절차임에도 불구하고 임상적 이점이 미미하다고 자주 불평하기 때문입니다.
|
||||
|
||||
또한, 이러한 수술 절차의 효과가 임상의의 수술 기술, 이러한 재료에 대한 지식 및 올바른 사용 능력에 크게 의존하고 있으므로, 이러한 절차를 덜 술자에 의존적으로 만드는 방향으로 나아가야 할 것입니다.
|
||||
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>sinus - 다운로드</title>
|
||||
<style>
|
||||
body { font-family: 'Malgun Gothic', sans-serif; max-width: 600px; margin: 60px auto; padding: 20px; text-align: center; background: #f8f9fa; }
|
||||
.card { background: white; border-radius: 12px; padding: 40px 30px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }
|
||||
h1 { color: #1a1a2e; font-size: 24px; margin-bottom: 10px; }
|
||||
p { color: #5f6f86; margin-bottom: 30px; }
|
||||
.btn { display: inline-block; background: #1668e3; color: white; text-decoration: none; padding: 14px 36px; border-radius: 8px; font-size: 16px; font-weight: bold; transition: background 0.2s; }
|
||||
.btn:hover { background: #1255bb; }
|
||||
.meta { margin-top: 20px; font-size: 12px; color: #888; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
<h1>sinus</h1>
|
||||
<p>슬라이드 14장이 준비되었습니다.</p>
|
||||
<a class="btn" href="sinus.pptx" download>프레젠테이션 다운로드</a>
|
||||
<div class="meta">/home/kim/homeclaw/.smallclaw/users/papa/workspace/sinus/sinus.pptx</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
{"project":"상악동_거상술_최신_동향","template":"creative","background":"cream","source_files":["pubmed/PMC10340512.pdf","pptx/sinus/PMC10340512_images"],"slides":[{"type":"title","title":"상악동 거상술에서 자가 혈소판 농축물의 최신 동향","subtitle":"Systematic Review: PRP, PRF, CGF와 골 이식의 결합","background":"cream"},{"type":"section","title":"연구 개요 및 배경"},{"type":"content","title":"연구 배경","bullets":["상악동 거상술: 상악골 부족 시 임플란트 안정성을 위한 필수 기법","자가 혈소판 농축물(PRP, PRF, CGF)의 역할: 골 재생 촉진 및 치유 가속화","최근 연구 동향: 2002개 논문 중 22개 최종 선정 (PRISMA)"],"image_url":"/api/files/pptx/sinus/PMC10340512_images/figure_p04_1.png","layout":"split-right"},{"type":"content","title":"자가 혈소판 농축물의 종류","bullets":["PRP (Platelet-Rich Plasma): 혈소판 풍부 혈장","PRF (Platelet-Rich Fibrin): 혈소판 풍부 섬유소","CGF (Concentrated Growth Factor): 농축 성장 인자","스티키 본(Sticky Bone): 혈소판 농축물 + 골 이식 재료의 혼합물"],"image_url":"/api/files/pptx/sinus/PMC10340512_images/figure_p03_1.png","layout":"split-left"},{"type":"section","title":"임상적 효과 및 장점"},{"type":"content","title":"자가 혈소판 농축물의 임상적 효과","bullets":["골 재생 및 세포 증식 촉진","자가 골 사용량 감소 → 공여부 부담 최소화","조기 혈관화 촉진: 이식재의 생착률 향상","염증 및术 후 통증 감소","조직 재생 및 치유 가속화"],"image_search":"dental bone regeneration","layout":"split-right"},{"type":"content","title":"상악동 거상술의 수술 과정","bullets":["측벽 개방술(Lateral Window Approach): 상악동 막 거상","골 이식 재료 삽입: 자가 골, 동종 골, 이종 골, 합성 골","혈소판 농축물 혼합: 스티키 본 형성","임플란트 식립: 동시 또는 지연 식립"],"image_url":"/api/files/pptx/sinus/PMC10340512_images/figure_p11_1.png","layout":"split-left"},{"type":"content","title":"Cone Beam CT를 통한 평가","bullets":["수술 전후 상악동의 골 높이 및 밀도 비교","이식재의 안정성 및 임플란트 생착률 평가","3D 이미지를 통한 정확한 진단 및 계획 수립"],"image_url":"/api/files/pptx/sinus/PMC10340512_images/figure_p12_1.png","layout":"split-right"},{"type":"content","title":"수술 기법 및 임플란트 시술 시점","bullets":["1단계 접근법: 골 이식과 동시에 임플란트 식립","2단계 접근법: 골 이식 후 4~6개월 후 임플란트 식립","혈소판 농축물의 역할: 조기 안정성 제공 및 치유 기간 단축"],"image_url":"/api/files/pptx/sinus/PMC10340512_images/figure_p13_1.png","layout":"split-left"},{"type":"content","title":"혈액 공급 및 조직 재생 메커니즘","bullets":["혈소판 농축물의 성장 인자 방출: VEGF, PDGF, TGF-β 등","혈관 신생 촉진: 이식재의 영양 공급 및 노폐물 제거","섬유소 망 형성: 세포 이동 및 조직 재생의 구조적 지지체"],"image_url":"/api/files/pptx/sinus/PMC10340512_images/figure_p16_1.png","layout":"split-right"},{"type":"section","title":"결론 및 향후 연구 방향"},{"type":"content","title":"결론","bullets":["자가 혈소판 농축물은 상악동 거상술의 성공률을 높이는 효과적인 보조재","골 재생, 조기 혈관화, 염증 감소 등 다양한 임상적 장점 입증","스티키 본의 활용: 수술 시간 단축 및 환자 만족도 향상"],"layout":"text"},{"type":"content","title":"향후 연구 방향","bullets":["장기 추적 연구를 통한 안정성 및 효과 검증","다양한 혈소판 농축물의 최적화된 혼합 비율 연구","비용-효과 분석을 통한 임상 적용 확대 방안 모색"],"image_search":"future dental research","layout":"split-right"},{"type":"title","title":"감사합니다","subtitle":"질문 있으신가요?","background":"cream"}]}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": 1,
|
||||
"papers": [
|
||||
{
|
||||
"key": "PMC10340512",
|
||||
"title": "Maxillary Sinus Augmentation Using Autologous Platelet Concentrates (Platelet-Rich Plasma, Platelet-Rich Fibrin, and Concentrated Growth Factor) Combined with Bone Graft: A Systematic Review.",
|
||||
"authors": "Malcangi G, Patano A, Palmieri G et al.",
|
||||
"year": "2023",
|
||||
"journal": "Cells",
|
||||
"doi": "doi: 10.3390/cells12131797",
|
||||
"pmcid": "PMC10340512",
|
||||
"pmid": "37443831",
|
||||
"_source": "pubmed",
|
||||
"abstract": "",
|
||||
"pdfPath": "pptx/sinus/PMC10340512.pdf",
|
||||
"txtPath": "pptx/sinus/PMC10340512.txt",
|
||||
"koPath": "pptx/sinus/PMC10340512.ko.txt"
|
||||
}
|
||||
]
|
||||
}
|
||||